我想創建一個每天運行的活動,看看帳戶是否很快就會過期。該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 天內過期的記錄。