Rumah > Soal Jawab > teks badan
P粉8313104042023-08-19 00:37:07
Ini adalah pertanyaan yang perlu dilaksanakan oleh acara anda:
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() );
Bagi penciptaan acara, anda mempunyai beberapa pilihan, beberapa daripadanya disenaraikan di sini:
Apa pun, anda mungkin mahu membungkus UPDATE
anda dalam prosedur tersimpan, dan jika terdapat lebih banyak penulisan, anda juga mungkin mahu membungkus transaksi apabila acara ini dipanggil.
P粉6595169062023-08-19 00:25:11
Baiklah, pertimbangkan MySQL
struktur jadual berikut:
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) );
Anda perlu menyemak setiap pemandu untuk melihat sama ada ia sudah lapuk dan mengemas kini peranti dengan betul.
Pertama, anda perlu mendayakan EVENTS
dalam pangkalan data:
SET GLOBAL event_scheduler = ON;
Seterusnya, anda boleh mencipta event
,检查所有 active
设备的 expired
pemandu yang berjalan setiap hari dan mengemas kininya dengan sewajarnya:
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 ;