首页 > 解决方案 > MySQL删除每个id的所有行,除了最新的行

问题描述

我有一张名为devices_last_insert

在此处输入图像描述

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

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

在此处输入图像描述

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

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查询中使用。

标签: mysqlsqltriggerssql-insert

解决方案


您不需要手动删除旧记录,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)

推荐阅读