zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL定时器开启、调用实现代码

mysql代码 实现 开启 调用 定时器
2023-06-13 09:14:42 时间
创建测试表
复制代码代码如下:

CREATETABLEt
(
vVARCHAR(100)NOTNULL
)ENGINEINNODBDEFAULTCHARSET=utf8;
创建定时器调用的存储过程
DELIMITER$$
DROPPROCEDUREIFEXISTSe_test$$
CREATEPROCEDUREe_test()
BEGIN
INSERTINTOtVALUES("1");
END$$
DELIMITER;
要使定时起作用MySQL的常量GLOBALevent_scheduler必须为on或者是1
--查看是否开启定时器
SHOWVARIABLESLIKE"%sche%";
--开启定时器0:off1:on
SETGLOBALevent_scheduler=1;
--创建事件
--每隔一秒自动调用e_test()存储过程
CREATEEVENTIFNOTEXISTSevent_test
ONSCHEDULEEVERY1SECOND
ONCOMPLETIONPRESERVE
DOCALLe_test();
--开启事件
ALTEREVENTevent_testON
COMPLETIONPRESERVEENABLE;
--关闭事件
ALTEREVENTevent_testON
COMPLETIONPRESERVEDISABLE;
从现在开始每隔九天定时执行
CREATEEVENTEVENT1
ONSCHEDULEEVERY9DAYSTARTSNOW()
ONCOMPLETIONPRESERVEENABLE
DO
BEGIN
CALLTOTAL();
END
每个月的一号凌晨1点执行
CREATEEVENTEVENT2
ONSCHEDULEEVERY1MONTHSTARTSDATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVALDAY(CURDATE())-1DAY),INTERVAL1MONTH),INTERVAL1HOUR)
ONCOMPLETIONPRESERVEENABLE
DO
BEGIN
CALLSTAT();
END
每个季度一号的凌晨2点执行
CREATEEVENTTOTAL_SEASON_EVENT
ONSCHEDULEEVERY1QUARTERSTARTSDATE_ADD(DATE_ADD(DATE(CONCAT(YEAR(CURDATE()),"-",ELT(QUARTER(CURDATE()),1,4,7,10),"-",1)),INTERVAL1QUARTER),INTERVAL2HOUR)
ONCOMPLETIONPRESERVEENABLE
DO
BEGIN
CALLSEASON_STAT();
END
每年1月1号凌晨四点执行
CREATEEVENTTOTAL_YEAR_EVENT
ONSCHEDULEEVERY1YEARSTARTSDATE_ADD(DATE(CONCAT(YEAR(CURDATE())+1,"-",1,"-",1)),INTERVAL4HOUR)
ONCOMPLETIONPRESERVEENABLE
DO
BEGIN
CALLYEAR_STAT();
END

MySQL的event在进行按月,季,年进行自动调用存储过程时,为了测试可以把系统改为年的最后一天,如2010-12-3123:59:55;