MySQL führt automatisierte Skripte aus
P粉821231319
P粉821231319 2023-08-18 11:24:32
0
2
448
<p>Ich habe eine MySQL-Datenbank mit zwei Tabellen: Treiber und Geräte</p> <p>Die Treibertabelle verfügt über ein Feld namens Ablaufdatum. Die Gerätetabelle verfügt über ein Feld namens Status. </p> <p>Mein Ziel ist es, eine Veranstaltung zu schaffen, die: </p> <ul> <li>Das aktuelle Datum abrufen</li> <li>Treiber (Ablaufdatum) mit aktuellem Datum vergleichen</li> <li>Wenn das Ablaufdatum abgelaufen ist, müssen Sie den Status des Geräts auf „EXP“ ändern</li> </ul> <p>Ist so etwas möglich? Wie eine Ablaufprüfung</p>
P粉821231319
P粉821231319

Antworte allen(2)
P粉831310404

这是您的事件需要执行的查询:

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粉659516906

好的,考虑以下 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 ;
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!