当前位置: 首页 > 面试题库 >

MySQL:使用两个外键创建表失败并显示“令人遗憾的重复键名”错误

阴高刚
2023-03-14
问题内容

在尝试创建新表时,MySQL给了我一个我无法解释的错误。

CREATE TABLE Products (
    id INT NOT NULL,
    PRIMARY KEY(id)
);

CREATE TABLE WarehouseMovements (
    time        DATETIME           NOT NULL,
    product1    INT                NOT NULL,
    product2    INT                NOT NULL,

    FOREIGN KEY WarehouseMovements(product1) REFERENCES Products(id),
    FOREIGN KEY WarehouseMovements(product2) REFERENCES Products(id)
);

失败ERROR 1061 (42000): Duplicate key name 'WarehouseMovements'。如果删除外键约束,则此操作成功,但是我要确保product1和product2实际指向某个地方。

默认引擎是InnoDB。

查询出了什么问题?


问题答案:

尝试区分FK名称:

CREATE TABLE Products (
    id INT NOT NULL,
    PRIMARY KEY(id)
);

CREATE TABLE WarehouseMovements (
    time        DATETIME           NOT NULL,
    product1    INT                NOT NULL,
    product2    INT                NOT NULL,

    FOREIGN KEY IX_WarehouseMovements_product1(product1) REFERENCES Products(id),
    FOREIGN KEY IX_WarehouseMovements_product2(product2) REFERENCES Products(id)
);

更新

那是索引或FK名称,而不是表名称。请参阅create-table-foreign-
keys文档

[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)

哪说

index_name表示外键ID。如果给定,则如果显式定义外键的索引,则将忽略此操作。否则,如果MySQL为外键创建索引,它将使用index_name作为索引名称。



 类似资料:
  • 嗨,我知道有人问过这个问题,但我还没有找到正确的答案,为什么当我尝试做我的第二个插入: 我得到了错误: 错误1452(23000):无法添加或更新子行:外键约束失败(.,约束外键()引用()) 下面的DDL代码:

  • 我们系统的所有用户都来自一个主“用户”类。同样,我们希望以相同的方式构造数据库,拥有一个主“用户”表,该表与特定用户类型的必要表连接,以提供额外的用户信息。 以这三个基本表格为例: 表用户 user_id|user_email|user_firstname|user_lastname|... 表雇员 user_id|employee_staff_number|... 表管理 user_id|adm

  • 这是我的sql文件,我得到错误后,我运行sql文件

  • 我试图在MySQL中创建一个有两个外键的表,这两个外键引用了其他两个表中的主键,但我得到一个errno:150错误,它将无法创建该表。 下面是所有3个表的SQL: 如有任何帮助,将不胜感激。

  • 问题内容: 刚在Mac OS X 10.6上安装了MySQL 5.5,并且在许多表上都有一个奇怪的问题。下面是一个例子。插入行失败,但不应插入外键约束。它引用的外键确实存在。有任何想法吗? 更新 :多次删除并重新创建数据库后,我在上述插入失败后进行了操作,并得到了令人惊讶的结果。找不到父语言表!这似乎很奇怪…有什么想法吗? 更新2 :事实证明,这只是MySQL中的一个 巨大 错误。显然,最新版本的

  • 我在MySQL中创建了以下三个表的基本模式,其中一个表有两个外键(documentreference表): 但是,我在运行时遇到以下错误: 错误1215:无法添加外键约束 SQL语句: 如果不存在,则创建表( int(5)非空自动增量, varchar(50), varchar(50), JSON,--single codableconcept数据类型 JSON,--创建的单个CodeableCo