2

我正在尝试在 Mysql 工作台中设置外键。我为外键使用了与我试图与之建立关系的表的主键相同的名称。我已经在另一个表中以这种方式设置了一个关系,但是当我尝试将更改应用于此表时,脚本给了我一个错误:

错误 1005:无法创建表“X.#sql-718_a”(错误号: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”,则设置外键关系没有问题。为什么会这样,为什么我不能让一个表中的主键名称与该表的外键相同?我之前已经建立了这样的关系,但对于这张桌子我不能。

4

2 回答 2

3

约束名称在数据库中必须是唯一的。

错误消息中的那(errno: 121)意味着 MySQL 遇到了重复键异常。造成这种情况的通常原因是数据库中已经存在同名的约束。

这种“唯一名称”要求是规范模式在构造外键约束名称时包含表名的原因之一。例如 FK_table_cols 例如FK_X_use_XyzID

为什么约束名称在数据库中必须是唯一的?这是 dbms 设计者的问题。

但是考虑一下:当数据库遇到约束冲突时,它会抛出一个包含约束名称的错误。当该约束名称仅引用数据库中的一个约束时,可以更轻松地定位问题。

于 2013-01-24T07:10:20.517 回答
0

您不能在数据库中使用相同的约束名称,如 DB 的 ACID 属性中所述。

于 2013-01-24T07:13:33.807 回答