我想创建一个每天运行的事件,并查看帐户是否即将过期。soon_expires
稍后,Bash 脚本将使用该单元向相关用户发送电子邮件,告知其相关情况。
这是我的事件的内容(使用 phpmyadmin):
SELECT * FROM users;
IF DATEDIFF(expirationtime, CURDATE()) < 45 THEN
SET soon_expires = 1;
ELSE
SET soon_expires = 0;
END IF;
然而它返回一个错误,说
#1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF DATEDIFF(expirationtime, CURDATE()) < 45 THEN SET soon_expires = 1; EL' at line 3
我还尝试创建一个触发器,它按预期工作。但我意识到触发器仅在行更新时运行 -expirationtime
或多或少是静态的,因此触发器是不够的。
答案1
CREATE EVENT check_expire
ON SCHEDULE
EVERY 1 DAY
STARTS '2019-08-21'
DO
UPDATE users
SET soon_expires = (DATEDIFF(expirationtime, CURRENT_DATE) < 45);
或者
UPDATE users
SET soon_expires = 1
WHERE DATEDIFF(expirationtime, CURRENT_DATE) < 45;
第一个变体更新表中的所有记录,第二个变体仅更新那些将在 45 天内过期的记录。