P粉8313104042023-08-19 00:37:07
這是您的事件需要執行的查詢:
UPDATE devices SET `status` = 'EXP' WHERE EXISTS ( SELECT 1 FROM drivers JOIN device_drivers ON drivers.id = device_drivers.driver_id AND device_drivers.device_id = devices.id WHERE drivers.`expiration date` < now() );
至於事件的創建,您有多種選擇,其中一些列在這裡:
無論如何,您可能想要將您的UPDATE
包裝在一個預存程序 中,而且如果有更多的寫入操作,您可能也希望在呼叫此事件時包裝一個交易。
P粉6595169062023-08-19 00:25:11
好的,考慮以下 MySQL
表結構:
CREATE TABLE Devices ( device_id INT PRIMARY KEY, status ENUM('ACTIVE', 'EXPIRED') ); CREATE TABLE Drivers ( driver_id INT PRIMARY KEY, device_id INT, expiration_date DATE, FOREIGN KEY (device_id) REFERENCES Devices(device_id) );
您需要遍歷每個驅動程序,查看是否已過期並正確更新裝置。
首先,您需要在資料庫中啟用 EVENTS
:
SET GLOBAL event_scheduler = ON;
接下來,您可以建立一個每天執行的 event
,檢查所有 active
裝置的 expired
驅動程式並進行適當的更新:
DELIMITER // CREATE EVENT UpdateDeviceStatus ON SCHEDULE EVERY 1 DAY STARTS CURRENT_DATE DO BEGIN UPDATE Devices d SET d.status = 'EXPIRED' WHERE EXISTS ( SELECT 1 FROM Drivers dr WHERE dr.device_id = d.device_id AND dr.expiration_date < CURRENT_DATE ) AND d.status = 'ACTIVE'; END; // DELIMITER ;