Mysql事件操作自动停止执行

时间:2017-02-17 06:38:22

标签: mysql database database-design mysql-event

我创建了一个自动获取系统当前日期的事件,并将其与学年的开始和结束日期相匹配。如果系统当前日期在学年的开始日期和结束日期之内,则会使用isCurrentSchoolYear更新1列。

我第一次这样做时效果很好。但是,当我在PC上更改日期以测试它是否适用于2020年时,没有任何事情发生了。 event设置为每 30 秒运行一次。

schoolyear_mt表

必须手动调用 setCurrentSchoolYear() 存储过程,以便将isCurrentSchoolYear的{​​/ em> 2020更新为1 < strong>应该自动更新)

enter image description here

=============================================== =======================

enrollmentdb.setSchoolYear事件定义:

CREATE EVENT enrollmentdb.e_setCurrentSchoolYear
ON SCHEDULE EVERY 30 second
DO CALL setCurrentSchoolYear();

=============================================== =======================

SELECT @@event_scheduler;

enter image description here

=============================================== =======================

show processlist;

enter image description here

show events from enrollmentdb;

enter image description here

如您所见,Interval Value列显示 30 ,但Time列显示 63163099 并继续增加。

所以问题是它不会在30秒后每隔自动更新isCurrentSchoolYear列。我不想手动调用名为setCurrentSchoolYear()的存储过程使其正常工作。

CREATE DEFINER=`root`@`localhost` PROCEDURE `setCurrentSchoolYear`()
BEGIN

DECLARE aSyId INT;

DECLARE EXIT HANDLER FOR sqlexception
    BEGIN
        ROLLBACK;
        RESIGNAL;
    END;

START TRANSACTION;
    -- compare the currentdate 
    SELECT schoolyear_id INTO aSyId FROM schoolyear_mt
    WHERE curdate() >= start_date AND curdate() <= end_date;

    SELECT aSyId;

    IF aSyId IS NOT NULL 
    THEN
        UPDATE schoolyear_mt SET isCurrentSchoolYear = 0 
        WHERE schoolyear_id >= 0;

        UPDATE schoolyear_mt SET isCurrentSchoolYear = 1
        WHERE schoolyear_id = aSyId;
    END IF;

COMMIT;

END

自动更新问题发生在我将机器的系统日期更改为 2020年2月2日之后,并尝试 2015年2月2日来测试它是否有效。 什么可能阻碍它每30秒手动执行一次?

有什么想法吗?

谢谢。

0 个答案:

没有答案