我不断收到此错误:
插入失败:[1062] 重复条目“提升你的类型游戏-http : //jessicahische.is/talkingtype ”,用于键“PRIMARY”。
问题是,没有重复的条目。这就是为什么我在收到该错误时感到困惑。
有什么方法可以检查使用 InnoDB 吗?
我已尝试导出表并阅读 SQL 代码并搜索任何重复项,但没有任何重复项。
我不断收到此错误:
插入失败:[1062] 重复条目“提升你的类型游戏-http : //jessicahische.is/talkingtype ”,用于键“PRIMARY”。
问题是,没有重复的条目。这就是为什么我在收到该错误时感到困惑。
有什么方法可以检查使用 InnoDB 吗?
我已尝试导出表并阅读 SQL 代码并搜索任何重复项,但没有任何重复项。
这并不是说表中已经有重复的条目,而是说那里已经有一个条目具有该主键的值,并且因此拒绝插入第二个条目。
我怀疑你是否运行:
或者如果该键是复合键
您会发现一个匹配的行,并且您的代码在错误点正试图插入第二个。
处理插入时的重复项:
如果您尝试
INSERT
为主键(或唯一索引)重复值,您将始终收到该错误。有几种方法可以解决它:在插入之前检查并进行更新(如果某些内容可能已更改)或不做任何事情。还有 mysql 特定
ON DUPLICATE KEY UPDATE
选项(请参阅https://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or-merge-in-mysql ) 如果您愿意牺牲与其他 RDBMS 的兼容性。从 9.5 版开始,Postgres 支持类似的功能,但语法略有不同(
ON CONFLICT DO UPDATE/NOTHING
- 请参阅https://wiki.postgresql.org/wiki/UPSERT)。MS SQL Server、Oracle 和其他一些系统支持
MERGE
SQL:2003 标准中定义的语句(参见https://en.wikipedia.org/wiki/Merge_(SQL)),旨在实现相同的功能等等。如果跨数据库兼容性是(或将来可能是)您的目标之一,请谨慎使用这些选项中的任何一个。您可能已达到 id 列(PRIMARY KEY)的限制。例如,如果你的列被定义为 tinyint(4),一旦你达到 127 的值,你就不能再高了。当您尝试插入该列时,较高的值仍然是 127,但您已经有一个具有该值的条目,因此错误会告诉您您尝试输入重复的条目('127')。
解决方案:将 PRIMARY KEY 的定义更改为更高的 INT。
我刚刚得到同样的错误。我的表只有 1 行,没有重复。
TLDR:检查您的外键,确保该值存在于父表中。MySQL 5.6.3 显然无法告诉您错误的真正原因。
没有这样的重复键!
我尝试在没有该子句的情况下运行相同的插入
ON DUPLICATE KEY ...
,并更好地了解正在发生的事情。现在我们开始做一些事情了。因此,我尝试使用在外键表中具有匹配值的不同值运行原始查询。查询运行没有问题。
为什么 MySQL 似乎发出错误的错误?我不确定,但这可能与
ON DUPLICATE KEY UPDATE
实施方式有关。我尝试运行与查询相同的插入查询REPLACE INTO
并得到相同的错误。如果您无缘无故地遇到此错误,请检查您的外键。尝试常规
INSERT
查询(而不是REPLACE INTO
orINSERT ... ON DUPLICATE KEY UPDATE...
)。如果一个人有一个产生冲突的触发器,这也可以被触发。
具有表 A 和 B。当将新记录插入 A 时,表 B 由触发器更新。
现在截断 A 而忘记截断 B。
对于 B 中存在 id 的任何查询,插入 A 现在将失败(当 B.id 是唯一的时。)
有一个我忘记的测试表,因此出现了这个错误,考虑到 A 是空的,起初有点神秘;)
如果我有系统关闭或网络问题,我会遇到这样的错误。您的数据库中确实没有重复项。那是 mysql db 错误...您需要做的就是,如果您进行插入但事实并非如此,只需更改要插入的表中的一列 from
varchar
totext
或bigint
然后重做插入. 这将解决问题。