mysql - 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
查询中使用。
解决方案
您不需要手动删除旧记录,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)
推荐阅读
- maven - 大型构建日志的问题
- php - 如何在 Laravel 中插入具有多个不同列的多行
- javascript - Discord bot 开发的 SQL 语法问题 (mySQL 8.0)
- android - 条件片段和导航重用
- ms-access - WScript.Shell 运行时错误 - IwshShell3 失败
- java - 从 Word 文档中读取 .docx 格式的数据作为每个字段,并用 Java 将其保存在数据库中
- pip - Conda 版本 pip install -r requirements.txt --target ./lib
- c# - 是否可以在检查器窗口中锁定或覆盖游戏对象缩放属性坐标?
- php - Silverstripe 4 SiteConfig 徽标图像未显示在模板中
- python-3.x - 如何调试“'module' object is not callable”的错误?