1062 重复条目但没有重复项?

Chr*_*ton 11 mysql

我不断收到此错误:

插入失败:[1062] 重复条目 'Upping Your Type Game- http://jessicahische.is/talkingtype ' 键'PRIMARY'。

问题是,没有重复的条目。这就是为什么我在收到该错误时感到困惑。

有没有办法使用 InnoDB 进行检查?

我尝试导出表并阅读 SQL 代码并搜索任何重复项,但没有任何重复项。

Dav*_*ett 6

这并不是说表中已经存在重复条目,而是说其中已经有一个条目具有主键的该值,因此拒绝插入第二个条目。

我怀疑你是否运行:

SELECT * 
FROM   <table> 
WHERE  <keyfield> = 'Upping Your Type Game-http://jessicahische.is/talkingtype'
Run Code Online (Sandbox Code Playgroud)

或者如果该键是复合键

SELECT * 
FROM   <table> 
WHERE  <keyfield1> = 'Upping Your Type Game' 
AND    <keyfield2> = 'http://jessicahische.is/talkingtype'
Run Code Online (Sandbox Code Playgroud)

您会找到一个匹配的行,并且您的代码在错误点尝试插入第二行。

处理插入重复:

如果您尝试INSERT为主键(或唯一索引)重复值,您将始终收到该错误。有几种方法可以解决它:在插入之前检查并进行更新(如果某些内容可能已更改)或不执行任何操作。

还有 mysql 特定ON DUPLICATE KEY UPDATE选项(参见/sf/ask/85323381/ ) 如果您愿意牺牲与其他 RDBMS 的兼容性。

从 9.5 版开始,Postgres 支持类似的功能,但语法略有不同(ON CONFLICT DO UPDATE/NOTHING- 请参阅https://wiki.postgresql.org/wiki/UPSERT)。

MS SQL Server、Oracle 和其他一些系统支持MERGESQL:2003 标准(参见https://en.wikipedia.org/wiki/Merge_(SQL))中定义的语句,旨在实现相同的功能和更多功能。如果跨数据库兼容性是(或将来可能是)您的目标之一,请小心使用这些选项中的任何一个。

  • 如果您尝试为主键(或唯一索引)插入重复值,您将始终收到该错误。有几种方法可以解决它:在插入之前检查并进行更新(如果某些内容可能已更改)或不执行任何操作。还有 mysql 特定的“ON DUPLICATE KEY UPDATE”选项(参见 http://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or -merge-in-mysql),如果您愿意牺牲与其他 RDBMS 的兼容性。 (2认同)