mysql事件
- 事件: 事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。
事件可以取代定时任务来执行的工作。
事件的优缺点
- 优点:
一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。 - 缺点:
定时触发,不可以调用。
语法
DELIMITER $$
CREATE EVENT EVENT_NAME
ON SCHEDULE EVENT_SCHEDULE
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
DO
BEGIN
….;
END$$
DELIMITER ;
详解
- EVENT_NAME:名称最大长度可以是64个字节。名字必须是当前Dateabase中唯一 建议规则:动作名称_(INTO/FROM_)表名_TIME
- EVENT_SCHEDULE:有两种设定计划任务的方式
- AT 时间戳,用来完成单次的计划任务。
- EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任 YEAR,MONTH,DAY,HOUR,MINUTE
或者SECOND。
- ON COMPLETION [NOT] PRESERVE :PRESERVE 当event到期了,event会被disable,但是该event还是会存在,而not
preserve该event会被自动删除掉. - ENABLE\DISABLE参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件。
- BEGIN….END 中可以调用存储过程。
例子
DELIMITER $$
CREATE EVENT event_first
ON SCHEDULE AT ‘2017-09-05 19:00:57’
ON COMPLETION NOT PRESERVE
ENABLE
DO
BEGIN
INSERT INTO t_user_tem(id,uid,uname,time) VALUES (NULL,1,NULL,NOW());
END$$
DELIMITER ;
DELIMITER $$
CREATE EVENT event_first2
ON SCHEDULE every 1 minute
ON COMPLETION NOT PRESERVE
ENABLE
DO
BEGIN
INSERT INTO t_user_tem(id,uid,uname,time) VALUES (NULL,1,NULL,NOW());
END$$
DELIMITER ;
DELIMITER $$
CREATE EVENT event_first2
ON SCHEDULE every 30 SECOND STARTS ‘2017-09-05 19:00:00’ ENDS ‘2017-09-05 19:10:00’
ON COMPLETION NOT PRESERVE
ENABLE
DO
BEGIN
INSERT INTO t_user_tem(id,uid,uname,time) VALUES (NULL,1,NULL,NOW());
END$$
DELIMITER ;