Mysql的event schedule可以让你设置你的mysql数据库在某个时间段执行你想要的动作
create event test1on schedule every 1 daystarts '2007-09-01 12:00:00'on completion not preservedo insert into yyy values('hhh','uuu');或create event teston schedule at '2007-09-01 12:00:00' + interval 1 dayon completion not preservedo insert into yyy values('hhh','uuu')解释:从2007年9月1日开始,每天对表yyy在12:00:00进行插入操作,并且只执行一次.使用这个功能之前必须确保event_scheduler已开启,可执行set global event_scheduler=1;或set global event_scheduler=on;来开启,也可以直接在启动命令上加上--event_scheduler=1.例如:mysqld...--event_scheduler=1另外也可以直接在mysql.ini或者mysql.cnf中添加event_scheduler=1要查看当前是否已经开启时间调度器,可以执行如下sql:show variables like 'event-scheduler';或者select @@event_scheduler;或者show processlist;二,创建时间(create event)create event [if not exists] event_nameon schedule[on completion[not] preserve][enable|disable][comment 'comment']do sql_statement;schedule:
at timestamp [+interval interval]|every interval [starts timestamp][ends timestamp]interval:
quantity{year|quarter|month|day|hour|minute|week|second|year_month|day_hour|day_minute|day_second|hour_minute|hour_second|minute_second}1)首先来看一个简单的例子来演示每秒插入一条记录到数据表:use testcreate table aaa(timeline timestamp);create event e_test_inserton schedule every 1 seconddo insert into test.aaa values(current_timestamp);等待三秒,再执行查询看看:mysql>select * from test.aaa;就可以看到有三条数据存在2)5天后清空aaa表:create event e_teston schedule at current_timestamp+interval 5 daydo truncate table test.aaa;3)2007年7月20日12点整清空aaa表:create event e_teston schedule at timestamp '2007-07-20 12:00:00'do truncate table test.aaa;4)每天定时清空aaa表:---执行之后,是指每天当前创建时间执行该eventcreate event e_teston schedule every 1 daydo truncate table test.aaa;5)5天后开启每天定时清空aaa表:create event e_teston schedule every 1 daystarts current_timestamp +interval 5 daydo truncate table test.aaa;6)每天定时清空aaa表,5天后停止执行:create event e_teston schedule every 1 dayends current_timestamp + interval 5 daydo truncate table test.aaa;7)5天后开启每天定时清空aaa表,一个月后停止执行create event e_teston schedule every 1 daystarts current_timestamp + interval 5 dayends current_timestamp + interval 1 monthdo truncate table test.aaa;三,修改事件(alter event)
alter event event_name[on schedule schedule][rename to new_event_name][on completion [not] preserve][comment 'comment'][enable|disable][do sql_statement]1)临时关闭事件alter event e_test disable2)开启事件alter event e_test enable3)将每天清空aaa表修改成每5天清空一次alter event e_teston schedule every 5 day;四,删除事件(drop event)语法很简单,如下所示:drop event [if exists] event_name例如删除前面创建的e_test事件drop event e_test当前前提是这个事件存在,否则会产生error 1513(HY000):unknown event错误,因此最好加上if existsdrop event if exists e_test另外当在my.ini或者my.cnf中添加了event_scheduler=1参数,那么在mysql启动之后,存在的event还是会继续运行.