Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mysql工作台中设置外键_Mysql_Mysql Workbench - Fatal编程技术网

在Mysql工作台中设置外键

在Mysql工作台中设置外键,mysql,mysql-workbench,Mysql,Mysql Workbench,我正在尝试在Mysql工作台中设置外键。我对外键使用了与我试图设置关系的表的主键相同的名称。我已经在另一个表中以这种方式设置了一个关系,但当我尝试将更改应用于此表时,脚本会给我一个错误: 错误1005:无法创建表“X.#sql-718_a”(错误号:121) SQL语句: 但是,如果将外键名称更改为“AbcID”,则设置外键关系没有问题。为什么会这样?为什么一个表的主键名不能与这个表的外键名相同?我之前已经建立了这样的关系,但是对于这个表我不能 约束名称在数据库中必须是唯一的 错误消息中的(er

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

错误1005:无法创建表“X.#sql-718_a”(错误号:121)

SQL语句:
但是,如果将外键名称更改为“AbcID”,则设置外键关系没有问题。为什么会这样?为什么一个表的主键名不能与这个表的外键名相同?我之前已经建立了这样的关系,但是对于这个表我不能

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

错误消息中的
(errno:121)
表示MySQL遇到了重复密钥异常。这通常是因为数据库中已经存在同名约束

这种“唯一名称”要求是规范模式在构造外键约束的名称时包含表名的原因之一。e、 g.FK_表格,例如
FK_X_使用XyzID

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


但请考虑这一点:当数据库遇到约束违规时,它会引发一个包含约束名称的错误。当该约束名称仅引用数据库中的一个约束时,这会使查找问题变得更容易。

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

我想,请发布
X
的表定义,我应该回头再仔细检查一下DB的酸性特性。谢谢我不相信数据库的ACID属性指定外键约束的名称是否应该(或需要)唯一。当然,需要某种唯一标识符,但也可以是表名称/分区名称/约束名称的组合,而不违反a、C、I或D属性。(再说一次,我可能需要重新学习这方面的知识。)
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)  ,