0

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

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

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

事件 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 //
4

1 回答 1

1

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

于 2013-06-21T08:39:06.837 回答