MySQL定时执行脚本(计划任务)命令实例
查看event是否开启
showvariableslike"%sche%";
将事件计划开启
创建存储过程test
CREATEPROCEDUREtest()
BEGIN
updateexaminfoSETendtime=now()WHEREid=14;
END;
创建evente_test
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去. 关闭事件任务 开户事件任务 以上测试均成功,测试环境为mysql5.4.2-beta-communitymysqlcommunityserver(GPL) 以上的相关内容就是对MySQL定时执行的介绍,望你能有所收获。 mysql计划任务重启后消失 我们只要修改一配置即可 event_scheduler在mysql的config中设置为OFF有关。去mysql中将配置改为ON则就搞定了。 MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。 要查看当前是否已开启事件调度器,可执行如下SQL: SHOWVARIABLESLIKE"event_scheduler"; SELECT@@event_scheduler; SHOWPROCESSLIST; +-----------------+-------+ SETGLOBALevent_scheduler=1; SETGLOBALevent_scheduler=ON; mysqld...--event_scheduler=1 my.iniormy.cnf中的 创建事件(CREATEEVENT) CREATEEVENT[IFNOTEXISTS]event_name schedule: INTERVAL: 1)首先来看一个简单的例子来演示每秒插入一条记录到数据表 USEtest; 2)5天后清空test表: CREATEEVENTe_test CREATEEVENTe_test CREATEEVENTe_test CREATEEVENTe_test 6)每天定时清空test表,5天后停止执行: CREATEEVENTe_test 7)5天后开启每天定时清空test表,一个月后停止执行: CREATEEVENTe_test 8)每天定时清空test表(只执行一次,任务完成后就终止该事件): CREATEEVENTe_test 修改事件(ALTEREVENT) ALTEREVENTe_testDISABLE; ALTEREVENTe_testENABLE; ALTEREVENTe_test 删除事件(DROPEVENT) DROPEVENT[IFEXISTS]event_name DROPEVENTe_test; DROPEVENTIFEXISTSe_test;
createeventifnotexistse_test
onscheduleevery30second
oncompletionpreserve
docalltest();
alterevente_testON
COMPLETIONPRESERVEDISABLE;
alterevente_testON
COMPLETIONPRESERVEENABLE;
或
或
若显示:
|Variable_name |Value|
+-----------------+-------+
|event_scheduler|OFF |
+-----------------+-------+
则可执行
或
来开启,也可以直接在启动命令加上“?event_scheduler=1”,例如:
[mysqld]
添加event_scheduler=ON
先来看一下它的语法:
ONSCHEDULEschedule
[ONCOMPLETION[NOT]PRESERVE]
[ENABLE|DISABLE]
[COMMENT"comment"]
DOsql_statement;
ATTIMESTAMP[+INTERVALINTERVAL]
|EVERYINTERVAL[STARTSTIMESTAMP][ENDSTIMESTAMP]
quantity{YEAR|QUARTER|MONTH|DAY|HOUR|MINUTE|
WEEK|SECOND|YEAR_MONTH|DAY_HOUR|DAY_MINUTE|
DAY_SECOND|HOUR_MINUTE|HOUR_SECOND|MINUTE_SECOND}
CREATETABLEaaa(timelineTIMESTAMP);
CREATEEVENTe_test_insert
ONSCHEDULEEVERY1SECOND
DOINSERTINTOtest.aaaVALUES(CURRENT_TIMESTAMP);
等待3秒钟后,再执行查询成功。
ONSCHEDULEATCURRENT_TIMESTAMP+INTERVAL5DAY
DOTRUNCATETABLEtest.aaa;
3)2007年7月20日12点整清空test表:
ONSCHEDULEATTIMESTAMP"2007-07-2012:00:00"
DOTRUNCATETABLEtest.aaa;
4)每天定时清空test表:
ONSCHEDULEEVERY1DAY
DOTRUNCATETABLEtest.aaa;
5)5天后开启每天定时清空test表:
ONSCHEDULEEVERY1DAY
STARTSCURRENT_TIMESTAMP+INTERVAL5DAY
DOTRUNCATETABLEtest.aaa;
ONSCHEDULEEVERY1DAY
ENDSCURRENT_TIMESTAMP+INTERVAL5DAY
DOTRUNCATETABLEtest.aaa;
ONSCHEDULEEVERY1DAY
STARTSCURRENT_TIMESTAMP+INTERVAL5DAY
ENDSCURRENT_TIMESTAMP+INTERVAL1MONTH
DOTRUNCATETABLEtest.aaa;
[ONCOMPLETION[NOT]PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOTPRESERVE。
ONSCHEDULEEVERY1DAY
ONCOMPLETIONNOTPRESERVE
DOTRUNCATETABLEtest.aaa;
[ENABLE|DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT‘comment"]可以给该事件加上注释。
ALTEREVENTevent_name
[ONSCHEDULEschedule]
[RENAMETOnew_event_name]
[ONCOMPLETION[NOT]PRESERVE]
[COMMENT"comment"]
[ENABLE|DISABLE]
[DOsql_statement]
1)临时关闭事件
2)开启事件
3)将每天清空test表改为5天清空一次:
ONSCHEDULEEVERY5DAY;
语法很简单,如下所示:
例如删除前面创建的e_test事件
当然前提是这个事件存在,否则会产生ERROR1513(HY000):Unknownevent错误,因此最好加上IFEXISTS相关文章