1.什么是事件
一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行;
mqsql的事件类似于linux的定时任务,不过是完全在mqsql内部实现的 。
事件是在一个独立的事件调度线程中被初始化,这个事件调度线程和处理链接的线程没有任何关系 。并且该线程在事件执行结束后,会自动销毁 。
2.开启事件查看是否开启:
show variables like 'event_scheduler';
文章插图
如果显示OFF,则输入以下语句开启:
set global event_scheduler = on;
查看事件:
通过show events;可以查看创建的事件
3.创建自定义事件首先创建一张测试表 。
create table test_table(id int auto_increment primary key,create_time datetime default CURRENT_TIMESTAMP null)comment '用来测试的表';
3.1 语法CREATE EVENT [IFNOT EXISTS] event_nameONSCHEDULE schedule[ONCOMPLETION [NOT] PRESERVE][ENABLE | DISABLE][COMMENT ``'comment'``]DO sql_statement;
解释:event_name:自己取的事件名schedule:触发的时间周期 。写法为:
AT TIMESTAMP [+ INTERVAL INTERVAL]或 EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
AT + 时间戳,用来完成单次的计划任务EVERY 时间(单位)的数量实践单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务 。
其中 INTERVAL 的取值又有每年/每月等等:
{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
很多,但是常用的YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND 。剩下的不标准的不建议使用 。ON COMPLETION参数
表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段 。而PRESERVE的作用是使事件在执行完毕后阻止该事件被Drop掉 。所以,对于特定时间执行的事件,如果保持默认,执行完毕后,事件将被删除,不想删除的话要设置成ON COMPLETION PRESERVE 。对于重复性时间,如果设置了ON COMPLETION NOT PRESERVE,那么也是只会在执行一次后停止并删除事件 。
[ENABLE | DISABLE] 可以设置该事件创建后状态是否开启或关闭,默认为ENABLE 。
[COMMENT ‘comment’]可以给该事件加上注释 。
3.2 例子3.2.1 每隔10秒插入一条记录
CREATE EVENT e_test_insertON SCHEDULE EVERY 10 SECONDDO insert INTO test_table (create_time) VALUES (current_timestamp)
可以通过show events;查看刚创建的事件文章插图
查看test_table
文章插图
3.2.2 在特定时间执行一次
CREATE EVENT e_test_insert_atON SCHEDULE AT TIMESTAMP '2020-05-28 11:00:00'DO insert INTO test_table (create_time) VALUES (current_timestamp)
文章插图
【mysql中定时任务的用法】
到时间后,查看test_table
文章插图
确实执行了 。再查看一下事件
文章插图
被删除了 。验证了前面的ON COMPLETION参数
3.2.3 在指定延时后执行一次
CREATE EVENT e_test_insert_atON SCHEDULE AT CURRENT_TIMESTAMP+INTERVAL 50 SECONDONCOMPLETION PRESERVEDO insert INTO test_table (create_time) VALUES (current_timestamp)
50秒后执行一次,并且不要完成后不要删除任务 。文章插图
并且执行完成后,没有被删除
3.2.4 5分钟后开始,每10秒插入一次
CREATE EVENT e_test_insertON SCHEDULE EVERY 10 SECONDSTARTS CURRENT_TIMESTAMP+INTERVAL 5 MINUTEDO insert INTO test_table (create_time) VALUES (current_timestamp)
Starts关键字,可以指定在什么时候开始文章插图
3.2.5 指定时间后结束
CREATE EVENT e_test_insertON SCHEDULE EVERY 10 SECONDSTARTS CURRENT_TIMESTAMP+INTERVAL 1 MINUTEENDS CURRENT_TIMESTAMP+INTERVAL 2 MINUTEDO insert INTO test_table (create_time) VALUES (current_timestamp);
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 茶道中的健康知识,茶道的出现
- 肾结石中药及治疗方法
- 增加免疫力的中药方法
- 参地益肾口服液成分
- 冬天降火用菊花普洱茶功效佳
- 茶叶私人定制,中国茶叶有望诞生奢侈品牌
- 茶具中的配角,玻璃茶具的造型品类繁多
- 倒茶也能端庄大雅,2012年中茶牌布朗大树开汤品鉴
- 职场中,要知道谋事先谋人,学会暗地里做局
- 年中离职,企业私扣绩效年底发放?属于违法行为