0

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

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

schoolyear_mt 表

必须手动调用 setCurrentSchoolYear() 存储过程来更新 应该自动更新isCurrentSchoolYear的内容)20201

在此处输入图像描述

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

enrollmentdb.setSchoolYear事件定义:

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

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

SELECT @@event_scheduler;

在此处输入图像描述

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

show processlist;

在此处输入图像描述

show events from enrollmentdb;

在此处输入图像描述

如您所见,Interval Value列显示30Time列显示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 秒手动执行一次?

有什么想法吗?

谢谢你。

4

0 回答 0