写入或更新时出现重复键?

69

写入或更新时的重复键

首先,我想承认一个事实,即我曾经阅读过类似的帖子,但是我无法找到解决这个让我很烦恼的问题的方法。我正在使用mysql workbench,并且一直收到这个错误。

  1. 在workbench上: ERROR:Error 1005:无法创建表'database.path'(errno:121)

  2. 在命令行上使用"Perror 121":MySQL error code 121:写入或更新时的重复键

日志结束时,显示9个成功操作1个失败,只有path表在日志中可见。

欢迎任何帮助和建议。我认为mysql编译器在调试时没有很好地表示实际问题。


5
你是否查阅了 https://dev59.com/_Gcs5IYBdhLWcg3wRBxQ? - rakeshjain
也许与您的问题无关,但是as_detail链接似乎有误?as_detail.As_Name = as_path.A_No. 它不应该链接到as_details中的PK吗? - Mad Dog Tannen
@KayNelson,实际上Workbench并没有明确指定与线之间的确切关系。它只是使用中间指向表格,正如大多数情况下所看到的那样。as_detail_AS_No = as_path_AS_No - user3066913
嗯,早上好...现在我明白所有关系都是错误的了呵呵:) 但对我来说,唯一/主键字段获得了双重值或FK约束名称可能是问题所在?你能发一下创建语句吗? - Mad Dog Tannen
@KayNelson 早上好,非常感谢您的努力帮助。我发现问题与 rakeshjain 发布的链接密切相关。我解决了我的问题。 - user3066913
约束名是唯一的,不是针对表的。因此,如果相同的约束名在其他地方使用,这会使得MySQL处理起来有些困难。 - Doogle
2个回答

140

抱歉,大家,我找到问题了。它与这个 帖子 有关。

这是由 rakeshjain 暗示的。

可能会被管理员删除作为重复帖子。

答案是,我在不同表上有两个名称相同的 CONSTRAINTS:

CONSTRAINT Update_ID_fk --> 更改一个就解决了问题。


4
当我尝试通过在同一查询中删除并添加键来向“UNIQUE”索引添加列时,发生了这种情况。我收到一个错误消息,其中还包含一个随机的表名和错误的数据。非常奇怪。但是,在第一个查询中删除索引,并在第二个查询中添加索引就可以正常工作了。 - simbabque
1
哇!我完全不知道!感谢您在这里发布的解决方案 - 我发现它比链接到的帖子更清晰。 - user3616725
更改了约束名称,现在可以正常工作! - julianm
这发生在我身上是因为有人制作了一个备份表 :| - Sarrus
1
谢谢您的回答。起初我没有理解,认为在多个表中可以使用相同的“CONSTRAINT”名称(类似于列名),但实际上不是这样,在每个表中必须有唯一的“CONSTRAINT”名称。 - user2360831
谢谢分享!要是我自己解决这个问题,可能得花上好几个小时。 - Edwin Dijk

66

你的外键名称必须是唯一的


4
这并没有回答问题。如果您想批评或要求作者进行澄清,请在他们的帖子下留言。- [来自审查] (/ review / low-quality-posts / 11042455) - Vasfed
15
@Vasfed 看起来似乎是这样。 - Ilia Choly
6
它确实提供了一个答案。 - RichieHH
它提供了一种基于(隐含的)答案的解决方案,因为问题(隐含地)寻求一种解决方案。 - Luca C.
4
我想要补充一下答案:“您的外键名称必须在整个架构/数据库中是唯一的。这意味着不同的表不能使用相同的FK名称。” - BartoszK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接