mysql 触发器和存储过程组合使用,实现定时触发操做

mysql能够实现定时触发功能,好比说定于某某时间mysql数据库作什么工做,或每隔多长时间作什么工做。mysql

第二种状况应用仍是比较广的,好比说我但愿天天检查一下个人数据信息,超过一个月的无用信息清除以腾出空间供其余存储数据使用;或者相隔一段时间更新一下数据等等。sql

下面讨论下这种状况,给出一个例子供你们参考:数据库

1.首先定义一个存储过程取名为e_test,注意竖线(“|”)必定不能丢事件

DELIMITER |event

DROP PROCEDURE IF EXISTS e_test |
CREATE PROCEDURE e_test()test

    BEGIN
       update order set status=1 where to_days(now())-TO_DAYS(date)>=1 and status=0;date

    END定时器

|数据

假设有一个order表,而且表里有一个status字段和一个date字段,如今将date中的时间距如今时间超过1天的而且状态status=0的这条数据的状态status改为1。存储过程

 

2.建立定时器取名为event_test

SET GLOBAL event_scheduler = 1; 
CREATE EVENT IF NOT EXISTS event_test

ON SCHEDULE EVERY 1 SECOND

ON COMPLETION PRESERVE  

DO CALL e_test();

建立一个定时器,每间隔1秒触发一次事件,即每一个一秒执行一次上面定义的e_test这个存储过程。

 

3.这个是最简单可是也是最重要的,咱们要手动的启动这个定时器,要否则是无法工做的。

ALTER EVENT event_test ON  

COMPLETION PRESERVE ENABLE; 

 

最后提醒一点,建立存储过程与建立定时器代码要分开执行,不然会报错,暂时还不知道为何,我的觉得这个多是数据库建立好存储过程须要必定的缓冲 时间来作好准备,咱们要认为的给他留出这个时间。固然这个时间对数据库来讲是必定的时间,可是对于咱们来讲仅仅是眨眼之间的功夫,只要分开两次执行时间就 足够了。

相关文章
相关标签/搜索