mysql事件学习
1、开启或关闭事件
1)查看事件是否开启(两种方式)
SHOW VARIABLES LIKE 'event_scheduler'; SELECT @@event_scheduler;
2)开启mysql的事件(两种方式)
SET GLOBAL event_scheduler = 1; SET GLOBAL event_scheduler = ON;
3)关闭mysql的事件
SET GLOBAL event_scheduler = OFF; SET @@global.event_scheduler = OFF; SET GLOBAL event_scheduler = 0; SET @@global.event_scheduler = 0;
2、增删改事件语法
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;
3、用法
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());
2)创建一个10分钟后清空test表数据的事件,代码如下:
CREATE EVENT IF NOT EXISTS test ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE DO TRUNCATE TABLE test.aaa;
3)创建一个在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;
4)创建一个从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());
5)创建一个从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();
4、参考链接
http://blog.chinaunix.net/uid-20639775-id-3323098.html