为啥会显示 MYSQL 错误“无法添加外键约束”? [复制]

Posted

技术标签:

【中文标题】为啥会显示 MYSQL 错误“无法添加外键约束”? [复制]【英文标题】:Why is the MYSQL error "Cannot add foreign key constraint" showing? [duplicate]为什么会显示 MYSQL 错误“无法添加外键约束”? [复制] 【发布时间】:2016-11-21 03:24:27 【问题描述】:

我目前正在完成我的 mysql 任务,并且在使用外键时遇到了一个小问题。问题如下:

CREATE TABLE IF NOT EXISTS entries(
student_id INT(10) UNSIGNED NOT NULL,
subject_name INT(10) UNSIGNED NOT NULL,
exam_date VARCHAR(20) NOT NULL,
PRIMARY KEY (exam_date),
FOREIGN KEY (student_id) REFERENCES  student (student_id),
FOREIGN KEY (subject_name) REFERENCES subject (subject_name));

输入此代码后,弹出错误 1215 说我无法添加外键约束。错误如下图:

ERROR 1215 (HY000): 无法添加外键约束

我试图链接外键的表是这样的:

CREATE TABLE IF NOT EXISTS subjects(
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
subject_name VARCHAR(20) NOT NULL,
level_of_entry VARCHAR(20),
exam_board VARCHAR(40) NOT NULL,
PRIMARY KEY(student_id));

我对这张表没有任何问题,只是想知道如何解决我的困境?

【问题讨论】:

首先创建表student和subject,然后创建entry表。并注意拼写错误 (FOREIGN KEY (subject_name) REFERENCES subject (subject_name));) 在这里您要添加学生并创建表学生。 【参考方案1】:

您在一张表中有 subject_name INT(10),在另一张表中有 subject_name VARCHAR(20) 在 MySQL 中创建外键时仔细检查类型。

【讨论】:

谢谢你解决了我的问题。【参考方案2】:

entriessubject_name 的数据类型为int,而在主题表中subject_name 的数据类型为varchar。 为了添加外键约束,两种数据类型必须匹配

【讨论】:

所以通过解决这个问题,我只需将代码 subject_name 更改为 subject_id?

以上是关于为啥会显示 MYSQL 错误“无法添加外键约束”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 无法添加外键约束

创建外键时出错:MySQL 错误 1215:无法添加外键约束 [重复]

MySQL 无法添加外键约束

如何修复此错误 3734:无法在 MySQL WorkBench 上添加外键约束?

MySQL数据库的Laravel迁移“无法添加外键约束”错误

MYSQL Workbench - 错误:错误 1215:无法添加外键约束