MySQL的删除所有行,除了每个ID的最新的

时间:2020-08-26 09:14:03

标签: mysql sql triggers sql-insert

我有一个名为devices_last_insert的表

enter image description here

数据库获取一些设备(大约4种不同的device_id)的数据更新,并将它们存储在另一个表中。

devices_last_insert表中,我想为每个设备保存上一个时间戳。 目前,它保存了每一行,如您在此处看到的:

enter image description here

将数据添加到该表的触发器写在获取数据的表中:

BEGIN
  INSERT INTO devices_last_insert(devices_last_insert.timestamp, 
  devices_last_insert.device_id)
  VALUES(NEW.timestamp, NEW.device);
END

我想更改触发器,以便在带有时间戳的device_id中不存在devices_last_insert的情况下添加一行(原始表中的行有一个timestamp列),如果device_id中已经存在devices_last_insert,则会更新时间戳。 问题在于NEW查询中不能使用DELETE

1 个答案:

答案 0 :(得分:1)

您不需要手动删除旧记录,MySQL可以为您完成繁重的工作。 您可以在device_id上创建唯一索引(或主键),然后在重复的语法上使用插入:

INSERT INTO devices_last_insert 
(devices_last_insert.timestamp, devices_last_insert.device_id)
VALUES (NEW.timestamp, NEW.device)
ON DUPLICATE KEY UPDATE timestamp = VALUES(timestamp)