首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在中设置外键

问在中设置外键
EN

Stack Overflow用户
提问于 2013-01-24 06:53:50
回答 2查看 11.3K关注 0票数 2

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

错误1005:无法创建表X#SQL718_a (errno: 121)

SQL语句:

代码语言:javascript
复制
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“,则设置外键关系没有问题。为什么这个表的主键名不能与这个表的外键相同呢?我以前也建立过这样的关系,但是对于这个桌子,我不能。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-24 07:10:20

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

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

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2013-01-24 07:13:33

不能像DB的ACID属性中描述的那样在数据库中使用相同的约束名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14495538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档