我知道在执行INSERT IGNORE
重复条目时会被忽略,错误会出现警告,但这就是我需要的。
场景:我们有一个包含2列(id, name)
的表格,其中两个列为UNIQUE
,id
为PRIMARY KEY
。
当您在INSERT IGNORE
列上执行name
时,它会为AUTO_INCREMENT
创建下一个id
(即使它稍后在您的数据库中不存在,也只是跳过它)当您致电LAST_INSERT_ID
时,它会为您提供下一个id
。但是我需要找到导致查询被忽略的id
。换句话说,id
的{{1}}是重复的。
欢迎任何MySQL / PHP技巧。 :)
感谢。
答案 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)