MySql Schedule事件

时间:2013-04-01 03:51:04

标签: mysql events stored-procedures scheduled-tasks

我想在每个月的月初在表中插入数据,我虽然使用mysql事件。但有人告诉我,如果我错过了那个事件(意思是如果我的服务器在预定的日期/时间内关闭,那么mysql在上线后不会重新运行该事件,不确定)那么mysql将不会再次重新运行它。

所以我创建了一个表格event_balance的表格,其中将记录事件。然后我创建了一个名为balance_update_check的事件,它将每小时运行并检查事件是否在本月执行,如果没有则会调用一个过程,该过程将为本月创建行,然后更新表event_balance使用event_typedate

但我对此不满意,请检查我的代码并告诉我它可以吗?如果可能提供更好的解决方案。谢谢你的时间。

活动balance_update_check

CREATE
    EVENT `balance_update_check`
    ON SCHEDULE EVERY 1 Hour
    DO BEGIN
        set @check_if_cont_doc:= (SELECT count(*) FROM event_balance WHERE event_type = 'doctor_contract' and monthname(event_balance.date) = monthname(CURDATE()));        

        set @check_if_cont_other:= (SELECT count(*) FROM event_balance WHERE event_type = 'other_contract' and monthname(event_balance.date) = monthname(CURDATE()));

        IF (@check_if_cont_doc = 0) Then
            call proc_leave_bal_doc_cont();
            Insert into event_balance (event_type,`date`) values('doctor_contract',CURDATE())       
        END IF;     

        IF (@check_if_cont_other = 0) Then
            call proc_leave_bal_other_cont();
            Insert into event_balance (event_type,`date`) values('other_contract',CURDATE())        
        END IF;
END //

1 个答案:

答案 0 :(得分:1)

您希望确保my.cnf文件中的event_scheduler设置为ON。转到my.cnf文件(如果您使用的是Windows,则输入my.ini文件)并注释掉event_scheduler=DISABLED或设置event_scheduler=ON。然后重启。这可确保您的事件在服务器重新启动后运行。这里有一些关于它的更多信息:dev.mysql.com/doc/refman/5.5/en/events-configuration.html