我创建了一个自动获取系统当前日期并将其与学年的开始和结束日期匹配的事件。如果系统当前日期在学年的开始日期和结束日期之内,则isCurrentSchoolYear
使用 更新列1
。
我第一次这样做时效果很好。但是,当我更改 PC 上的日期以测试它是否适用于 2020 年时,什么也没有发生。event
设置为每30秒运行一次。
schoolyear_mt 表
(必须手动调用 setCurrentSchoolYear()
存储过程来更新 应该自动更新isCurrentSchoolYear
的内容)2020
1
==================================================== =====================
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
列显示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 秒手动执行一次?
有什么想法吗?
谢谢你。