MySQL 中的外键:错误 1005
Posted
技术标签:
【中文标题】MySQL 中的外键:错误 1005【英文标题】:Foreign Key in MySQL : ERROR 1005 【发布时间】:2013-09-13 10:12:09 【问题描述】:我对在 mysql 中添加外键有点困惑
我想要做的是引用学生主键:
CREATE TABLE Enrolled(sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid, cid), FOREIGN KEY (sid) REFERENCES Students);
然而,我得到的是
ERROR 1005 (HY000): Can't create table 'test_db.Enrolled' (errno: 150)
我四处寻找,发现
MySQL "ERROR 1005 (HY000): Can't create table 'foo.#sql-12c_4' (errno: 150)"
但是,我的学生表已经有一个主键,所以这应该不是问题:
| Students | CREATE TABLE Students (
sid char(20) NOT NULL DEFAULT '',
name char(20) DEFAULT NULL,
login char(10) DEFAULT NULL,
age int(11) DEFAULT NULL,
gpa float DEFAULT NULL,
PRIMARY KEY (sid)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
我觉得我错过了一些相当基本的东西,但我似乎无法发现它。有什么建议吗?
【问题讨论】:
【参考方案1】:您应该在引用的表之后添加引用的列名
REFERENCES Students(sid)
。因此,您必须将代码更改为以下解决方案
CREATE TABLE Enrolled
(
sid CHAR(20),
cid CHAR(20),
grade CHAR(2),
PRIMARY KEY (sid, cid),
FOREIGN KEY (sid) REFERENCES Students(sid)
);
【讨论】:
【参考方案2】:如何明确引用列?比如:
CREATE TABLE Enrolled(
sid CHAR(20),
cid CHAR(20),
grade CHAR(2),
PRIMARY KEY (sid, cid),
FOREIGN KEY (sid) REFERENCES Students (sid)
);
看FOREIGN KEY (sid) REFERENCES Students (sid)
,最后一行。另请注意,如果外键是单列,您可以在列类型之后指定它:
CREATE TABLE Enrolled(
sid CHAR(20) REFERENCES Students (sid),
...
【讨论】:
以上是关于MySQL 中的外键:错误 1005的主要内容,如果未能解决你的问题,请参考以下文章
使用 mysql 工作台创建 CHAR 类型的外键时出错:错误 1005:无法创建表(错误号:150)
SQLSTATE [HY000] Laravel 8 中的外键约束格式错误