我正在尝试在 Mysql 工作台中设置外键。我使用的外键名称与我尝试与之建立关系的表的主键名称相同。我已经在另一个表中以这种方式设置了一个关系,但是当我尝试将更改应用于此表时,脚本给出了一个错误:
Error 1005: Can't create table 'X.#sql-718_a' (errno: 121)
SQL语句:
ALTER TABLE `X`.`X_use`
ADD CONSTRAINT `XyzID`
FOREIGN KEY (`XyzID` ) REFERENCES `X`.`Xyz` (`XyzID` )
ON DELETE NO ACTION O
N UPDATE NO ACTION ,
ADD INDEX `XyzID` (`XyzID` ASC) ,
但是,如果我将外键名称更改为“AbcID”,那么设置外键关系就没有问题。为什么会这样?为什么我不能让一个表的主键名称与该表的外键名称相同?我以前已经建立过类似的关系,但对于这张表我不能。
最佳答案
约束名称在数据库中必须是唯一的。
错误信息中的(errno: 121)
表示MySQL遇到了重复键异常。造成这种情况的通常原因是数据库中已经存在同名约束。
这种“唯一名称”要求是规范模式在构造外键约束名称时包含表名称的原因之一。例如FK_table_cols 例如FK_X_use_XyzID
。
为什么约束名称在数据库中必须是唯一的?这是 dbms 设计者的问题。
但请考虑这一点:当数据库遇到约束违规时,它会抛出包含约束名称的错误。当该约束名称仅引用数据库中的一个约束时,就可以更轻松地定位问题。
关于mysql - 在Mysql Workbench中设置外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14495538/