我有一个MySQL数据库,其中有两个表:驱动程序和设备
驱动程序表中有一个名为到期日期的字段. 设备表有一个名为Status的字段.
我的目标是创造一个活动,它将:
- 获取当前日期
- 将驱动因素(到期日期)与当前日期进行比较
- 如果过期日期已过,则需要将设备的状态更改为"EXP"
这样的事情有可能发生吗? 它就像一张过期支票
我有一个MySQL数据库,其中有两个表:驱动程序和设备
驱动程序表中有一个名为到期日期的字段. 设备表有一个名为Status的字段.
我的目标是创造一个活动,它将:
这样的事情有可能发生吗? 它就像一张过期支票
好的,考虑一下下面的MySQL
表 struct :
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 ;