在执行INSERT IGNORE时如何在表中找到重复的ID?

时间:2010-01-06 10:14:19

标签: php mysql

我知道在执行INSERT IGNORE重复条目时会被忽略,错误会出现警告,但这就是我需要的。

场景:我们有一个包含2列(id, name)的表格,其中两个列为UNIQUEidPRIMARY KEY

当您在INSERT IGNORE列上执行name时,它会为AUTO_INCREMENT创建下一个id(即使它稍后在您的数据库中不存在,也只是跳过它)当您致电LAST_INSERT_ID时,它会为您提供下一个id。但是我需要找到导致查询被忽略的id。换句话说,id的{​​{1}}是重复的。

欢迎任何MySQL / PHP技巧。 :)

感谢。

1 个答案:

答案 0 :(得分:0)

我认为您无法使用INSERT IGNORE提取此信息。即使警告文本包含键值,也只有很多警告被缓冲,所以你不能依赖它。

我可能会尝试重写查询,以避免插入重复。您始终可以通过执行

来检测密钥
SELECT id FROM tab WHERE name in ('...value1...',...,'...valueN...')

根据要插入的数据的格式以及插入方式(批量或一次一行),您可以执行多项操作以避免插入已知重复项。

另一方面,如果您想要提取可能重复的ID来代替执行这些行的更新,那么您应该使用REPLACE语法(http://dev.mysql.com/doc/refman/5.1/en/replace.html)或者ON DUPLICATE KEY UPDATE构造(http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html