`
wellba
  • 浏览: 31170 次
  • 性别: Icon_minigender_1
  • 来自: 郴州
社区版块
存档分类
最新评论

Mysql事件学习

阅读更多
在系统管理或者数据库管理中,经常要周期性的执行某一个命令或者SQL语句。对于linux系统熟悉的人都知道linux的cron计划任务,能很方便地实现定期运行指定命令的功能。Mysql在5.1以后推出了事件调度器(Event Scheduler),和linux的cron功能一样,能方便地实现 mysql数据库的计划任务,而且能精确到秒。使用起来非常简单和方便。
由于最近需要用到事件这个功能,因此学习了一下,感觉非常棒,总结一下,方便以后使用,也希望能对其他的初学者有帮助。
一、    如果开启事件
在使用事件这个功能,首先要保证你的mysql的版本是5.1以上,然后还要查看你的mysql服务器上的事件是否开启。
查看事件是否开启,使用如下命令查看:
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

如果看到event_scheduler为on或者PROCESSLIST中显示有event_scheduler的信息说明就已经开启了事件。如果显示为off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就说明事件没有开启,我们需要开启它。
开启mysql的事件,通过如下三种方式开启:
Ø  通过动态参数修改
SET GLOBAL event_scheduler = ON;

更改完这个参数就立刻生效了
注意:还是要在my.cnf中添加event_scheduler=ON。因为如果没有添加的话,mysql重启事件又会回到原来的状态了。
Ø  更改配置文件然后重启
在my.cnf中的[mysqld]部分添加如下内容,然后重启mysql。
event_scheduler=ON

Ø  通过制定事件参数启动
mysqld ... --event_scheduler=ON


二、    Mysql事件的语法简介
1.        创建事件的语法
CREATE
    [DEFINER = { user | CURRENT_USER }]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO event_body;
 
schedule:
    AT timestamp [+ INTERVAL interval] ...
     | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]
interval:
  quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR |
DAY_MINUTE |DAY_SECOND | HOUR_MINUTE |
HOUR_SECOND | MINUTE_SECOND}

参数详细说明:
DEFINER: 定义事件执行的时候检查权限的用户。
ON SCHEDULE schedule: 定义执行的时间和时间间隔。
ON COMPLETION [NOT] PRESERVE: 定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE。
ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。
COMMENT 'comment': 定义事件的注释。

2.        更改事件的语法
ALTER
    [DEFINER = { user | CURRENT_USER }]
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    [DO event_body]

3.        删除事件的语法
DROP EVENT [IF EXISTS] event_name
三、    Mysql事件实战
1.         测试环境
创建一个用于测试的test表:
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t1` datetime DEFAULT NULL,
  `id2` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8

2.         实战1
Ø  创建一个每隔3秒往test表中插入一条数据的事件,代码如下:
CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND
ON COMPLETION PRESERVE
DO INSERT INTO test(id,t1) VALUES('',NOW());

Ø  创建一个10分钟后清空test表数据的事件
CREATE EVENT IF NOT EXISTS test
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO TRUNCATE TABLE test.aaa;

Ø  创建一个在2012-08-23 00:00:00时刻清空test表数据的事件,代码如下:
CREATE EVENT IF NOT EXISTS test
ON SCHEDULE
AT TIMESTAMP '2012-08-23 00:00:00'
DO TRUNCATE TABLE test;

Ø  创建一个从2012年8月22日21点45分开始到10分钟后结束,运行每隔3秒往test表中插入一条数据的事件,代码如下:
CREATE EVENT IF NOT EXISTS test ON SCHEDULE EVERY 3 SECOND
STARTS '2012-08-22 21:49:00' 
ENDS '2012-08-22 21:49:00'+ INTERVAL  10 MINUTE
ON COMPLETION PRESERVE
DO INSERT INTO test(id,t1) VALUES('',NOW());


3.         实战2
通常的应用场景是通过事件来定期的调用存储过程,下面是一个简单的示例:
创建一个让test表的id2字段每行加基数2的存储过程,存储过程代码如下:
DROP PROCEDURE IF EXISTS test_add;
DELIMITER //
CREATE PROCEDURE test_add()
BEGIN
DECLARE 1_id INT DEFAULT 1;
DECLARE 1_id2 INT DEFAULT 0;
DECLARE error_status INT DEFAULT 0;
DECLARE datas CURSOR  FOR SELECT id FROM test;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET error_status=1;
OPEN datas;
FETCH datas INTO 1_id;
REPEAT
SET  1_id2=1_id2+2;
UPDATE test SET id2=1_id2 WHERE id=1_id;
FETCH datas INTO 1_id;
UNTIL  error_status
END REPEAT;
CLOSE  datas;
END//


事件设置2012-08-22 00:00:00时刻开始运行,每隔1调用一次存储过程,40天后结束,代码如下:
CREATE EVENT test ON SCHEDULE EVERY 1 DAY
STARTS '2012-08-22 00:00:00'
ENDS '2012-08-22 00:00:00'+INTERVAL 40 DAY
ON COMPLETION PRESERVE DO
CALL test_add();


四、    参考链接
http://dev.mysql.com/doc/refman/5.1/en/events-configuration.html
http://dev.mysql.com/doc/refman/5.1/en/create-event.html
http://blog.163.com/duanpeng3@126/blog/static/8854373520105182123112/
分享到:
评论

相关推荐

    数据库mysql学习脑图

    本资源“数据库mysql学习脑图”旨在为MySQL初学者提供一个清晰的学习路径,帮助理解其核心概念和功能。 首先,脑图将可能涵盖数据库基础,包括数据库的概念、数据模型(如层次模型、网状模型、关系模型)以及SQL...

    Mysql Mysql学习资料

    这份"Mysql Mysql学习资料"涵盖了关于MySQL的基础到高级的知识点,对于想要深入理解数据库管理和开发的人员来说是一份宝贵的资源。 1. **MySQL基础知识** - 数据库概念:理解数据库是什么,以及它在存储和管理数据...

    Mysql学习文档

    4. **MySQL触发器**:触发器是一种特殊类型的存储过程,当数据库中的某些特定事件发生时(如插入、更新或删除记录)自动执行。 5. **MySQL视图**:视图是从一个或多个表中选择出来的虚拟表,它可以帮助简化复杂的...

    mysql学习资料mysql学习资料

    - 触发器(TRIGGER):学习如何设置触发器,实现自动响应特定数据库事件的行为。 - 事务处理:理解ACID属性,使用BEGIN、COMMIT、ROLLBACK管理事务,确保数据一致性。 - 索引:了解B树索引、哈希索引和全文索引,...

    mysql学习文档

    这份“mysql学习文档”是专为初学者和有经验的开发者设计的,旨在帮助他们深入理解和掌握MySQL的核心概念、操作以及最佳实践。 1. **基础概念** - **关系型数据库**:MySQL基于关系模型,它通过表格来组织数据,每...

    mysql文件学习

    在“mysql文件学习”这个主题中,我们可以深入探讨MySQL的多个关键概念和功能。 首先,理解数据库的基本概念是至关重要的。数据库是一个组织和存储数据的系统,而MySQL则提供了一个平台来创建、管理和查询这些数据...

    MYSQL学习手册

    这份"MYSQL学习手册"涵盖了MySQL的基础知识、安装配置、数据类型、SQL语句、索引、存储引擎、视图、触发器、事务处理、备份与恢复、性能优化以及安全管理等方面,旨在帮助读者全面掌握MySQL的使用。 1. MySQL基础:...

    mysql学习资料整理

    ### MySQL学习资料整理 #### 一、MySQL基础知识 **1. 创建与管理数据库** - **查看数据库**: 使用 `show databases;` 命令来查看MySQL服务器上所有的数据库。 - **创建数据库**: 可以通过 `create database ...

    MySQL5认证学习指南

    MySQL5认证学习指南是一份详尽的教程,旨在帮助用户深入了解和掌握MySQL5数据库管理系统,为获取MySQL5相关认证提供全面的学习资源。这份文档资料涵盖了MySQL5的基础知识、安装配置、数据类型、SQL语句、表操作、...

    PHP、MySQL与JavaScript学习手册 第4版

    《PHP、MySQL与JavaScript学习手册 第4版》是一本针对初学者和进阶者全面讲解这三种技术的权威指南。本书旨在帮助读者掌握Web开发的核心技能,通过理论结合实践,深入理解PHP、MySQL和JavaScript之间的协作关系,...

    mysql学习交流

    MYSQL 学习笔记和交流分享 主要介绍了mysql 5特征包括 分区,事件,存储引擎。

    MYSQL开发学习笔记

    ### MySQL开发学习笔记知识点梳理 #### 一、基础知识概述 - **数据库定义**: 数据库(database)是用于存储数据的仓库,它可以高效地存储和处理数据。主要存储介质有两种:磁盘和内存(RAM)。 - **数据库分类**: - *...

    学习MySQL笔记 MySQL资源

    这份“学习MySQL笔记”资源可能是为了帮助用户深入理解MySQL的各个方面,包括安装、基本操作、查询语言、表设计、索引、事务处理、视图、存储过程、触发器、备份与恢复等。 首先,MySQL的安装是初学者需要掌握的第...

    MYsql培训学习教程

    这份"MYsql培训学习教程"提供了全面的学习资源,帮助初学者和有经验的开发者进一步提升MySQL技能。 首先,我们要了解MySQL的基础概念。MySQL是一个客户端-服务器结构的数据库系统,由客户端应用程序和服务器端程序...

    MySql学习样例-脚本-示例.7z

    7. 触发器:MySQL中的触发器是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的预定义SQL语句,常用于实现业务规则或数据验证。 8. 事务处理:MySQL支持ACID(原子性、一致性、隔离性、持久性)事务...

    mysql使用实例book-MySQL

    通过对本书的学习,你可以深入了解MySQL在实际工作中的应用,提升数据库管理、查询优化以及数据存储的能力。 首先,我们要理解MySQL的核心概念。MySQL是一种关系型数据库管理系统(RDBMS),它支持SQL语言,广泛...

    MySQL官方学习资料

    以下是对"MySQL官方学习资料"的详细解析。 1. **MySQL简介** MySQL是一个开源、免费的数据库系统,支持多种操作系统,如Windows、Linux和macOS。它采用了SQL(结构化查询语言)来操作数据,具备高效、可扩展性和...

    MySql MySql使用方法 Mysql例子

    MySQL是世界上最流行的开源关系型数据库...通过学习和实践这些基本概念,你将能够熟练地在各种场景中使用MySQL,无论是开发小型项目还是管理大型数据库。记住,理论知识与实际操作相结合,才能真正掌握MySQL的魅力。

Global site tag (gtag.js) - Google Analytics