我试图在Mysql工作台中设置一个外键。对于外键,我使用了与试图设置关系的表的主键相同的名称。我已经在另一个表中以这种方式设置了一个关系,但是当我尝试将修改应用到这个表时,脚本会给出一个错误:
错误1005:无法创建表X#SQL718_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“,则设置外键关系没有问题。为什么这个表的主键名不能与这个表的外键相同呢?我以前也建立过这样的关系,但是对于这个桌子,我不能。
发布于 2013-01-24 07:10:20
约束名称在数据库中必须是唯一的。
错误消息中的(errno: 121)意味着MySQL遇到了重复的键异常。造成这种情况的通常原因是数据库中已经存在同名约束。
这种“唯一名称”要求是规范模式在构造外键约束的名称时包含表名的原因之一。例如FK_table_cols,例如FK_X_use_XyzID。
为什么约束名称必须在数据库中是唯一的?这是dbms设计者的一个问题。
但是请考虑这一点:当数据库遇到约束冲突时,它会抛出一个包含约束名称的错误。当该约束名称仅引用数据库中的一个约束时,这会使查找问题变得更加容易。
发布于 2013-01-24 07:13:33
不能像DB的ACID属性中描述的那样在数据库中使用相同的约束名称。
https://stackoverflow.com/questions/14495538
复制相似问题