我有一个MySQL数据库,其中有两个表:驱动程序和设备

驱动程序表中有一个名为到期日期的字段. 设备表有一个名为Status的字段.

我的目标是创造一个活动,它将:

  • 获取当前日期
  • 将驱动因素(到期日期)与当前日期进行比较
  • 如果过期日期已过,则需要将设备的状态更改为"EXP"

这样的事情有可能发生吗? 它就像一张过期支票

推荐答案

好的,考虑一下下面的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 ;

Mysql相关问答推荐

将具有多个结果的表连接为新列?

如何有效地计算共同的朋友/追随者?

S优化联接更新的最佳方式是什么?

如何在Sequelize中创建限制查询?

将值代入子查询

用于搜索从各种表中获得的结果的查询

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

在时间戳上搜索大的MySQL表很慢

查询具有JSON对象数组的列时,JSON_CONTAINS的MySQL语法错误

MySQL 计数出现的百分比大于

将类图转换为SQL数据库

Travis 构建失败并出现错误 LOAD DATA LOCAL INFILE 文件请求因访问限制而被拒绝

估计对大表进行分区所需的时间

如何在 mysql 的 group by 子句中 Select 最后创建的记录?

如何查询由另一个查询创建的表?

在 Presto Athena 中将字符串转换为数组

MySQL - 计算行重复的最大计数

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)

带有 OuterRef 的简单子查询

如何将 mysqldump 的输出拆分为较小的文件?