【问题标题】:INSERT IGNORE - How can I tell if inserted?INSERT IGNORE - 如何判断是否已插入?
【发布时间】:2024-08-27 16:35:02
【问题描述】:

我将需要一个 SQL 查询来 INSERT .. ON DUPLICATE KEY UPDATE(或 INSERT IGNORE INTO)我的表。

我需要知道是否发生了更新实际上或者插入了一个新行。

这个SO answer 是一个很好的参考,不幸的是,所采取的行动没有答案。

至于现在我正在使用 INSERT .. ON DUPLICATE KEY UPDATE:

INSERT INTO `tbl` (`CLIENT_ID`, `COMP_ID`, `DATETIME`) VALUES (12334,32,NOW())
                    ON DUPLICATE KEY UPDATE
                    `COMP_ID`=VALUES(`COMP_ID`), `DATETIME`=VALUES(`DATETIME`);";

并检查affected_rows 值。
如果affected_rows 等于1,意味着-> 插入新行
如果affected_rows 等于2,意味着-> 行更新

如果出现重复,我不希望发生任何变化,但我想知道是否存在重复。

使用 MYSQL

【问题讨论】:

  • Buried in the documentation - 新插入将返回 1 个受影响的行,而更新将返回 2。如果忽略,INSERT IGNORE 将返回 0,我相信。

标签: mysql sql


【解决方案1】:

检查受影响的行数:

  • 返回值1 表示发生INSERT
  • 返回值2 表示发生UPDATE

如果您使用 JDBC,则这是 update()execute() 调用的 int 返回值。

所有框架都有将这个值传回给你的方法,例如 Hibernate 的 Query.executeUpdate() 返回这个 int 值。

【讨论】: