mysql - 在Mysql Workbench中设置外键

标签 mysql mysql-workbench

我正在尝试在 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/

相关文章:

mysql - 使用 MySQL Workbench 为 SSMS 人员构建和测试

MySql Workbench - "Local instance 3306"和 "Localhost via pipe"之间的区别?

javascript - 百分比计算不适用于我的 php

c# - 如何更改数据库 - Entity Framework (mysql 数据库)使用的模式?

mysql - 带有外键的大型数据集的 Django 批量创建

mysql - 如何在SQL中获取具有该ID的其他列记录

php - 是否在 Yii 中使用 "emulatePrepare"?

sql - 在 MySql 中,如果我在列表中传递重复 ID,如何获得行重复?

mysql - 为什么 MySQL Workbench 显示与 known_hosts 相关的连接错误?

MySQL Workbench 6.1 - 表编辑器 utf8 字符未正确显示