在 MySQL 中创建外键

Posted

技术标签:

【中文标题】在 MySQL 中创建外键【英文标题】:Creating foreign keys in MySQL 【发布时间】:2015-01-18 18:06:08 【问题描述】:

我正在尝试通过 mysql 中的外键将两个表链接在一起。 CLIENTS 表应使用 Client ID 属性链接到另一个表 (BIDS)。

CREATE TABLE CLIENTS (
 CLIENTID            NUMERIC(3) NOT NULL,
 FOREIGN KEY(CLIENTID) REFERENCES BIDS(CLIENTID),
 PRIMARY KEY(CLIENTID, EMAILADDRESSES,PHONENUMBERS,CONTACTS)
 );

但是,当我尝试执行代码时,MySQL 会返回此错误。

#1005 - 无法创建表 'CLIENTS' (errno: 150)

这似乎不是语法错误,所以有谁知道导致问题的原因或我该如何解决?

【问题讨论】:

MySQL Creating tables with Foreign Keys giving errno: 150 的可能重复项 您的示例对我来说似乎不完整:如果表中没有这些列,如何将列 EMAILADDRESSESPHONENUMBERSCONTACTS 放入主键? BIDS(CLIENTID) 的数据类型是什么? errno 150最常见的原因是FK的数据类型与其引用的PK的数据类型不匹配。 在我更新时在此链接上查找答案。 ***.com/a/46240799/8158782 【参考方案1】:

当使用多列创建具有主键的表时,必须在查询中指定它们 -

CREATE TABLE CLIENTS (
 CLIENTID NUMERIC(3) NOT NULL,
 EMAILADDRESSES CHAR(64),
 PHONENUMBERS VARCHAR(16),
 CONTACTS VARCHAR(32), 
 FOREIGN KEY(CLIENTID) REFERENCES BIDS(CLIENTID),
 CONSTRAINT key_name PRIMARY KEY(CLIENTID, EMAILADDRESSES,PHONENUMBERS,CONTACTS)
);

您还必须为多列主键指定名称。但是,为什么要将所有这些列作为键是一个谜。

【讨论】:

以上是关于在 MySQL 中创建外键的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 中创建外键会产生错误:

无法在 MySQL Workbench 中创建外键

SQL中创建外键约束

在交叉引用表中创建具有两个外键的 MySQL 表

无法在PhpStorm中创建外键

在SQL Server 中创建外键