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