MySQL数据库:外键错误

时间:2018-04-27 17:02:43

标签: mysql sql database

所以我试图创建一个表格如下:

CREATE TABLE gives (
pid VARCHAR(7),
crn VARCHAR(7),
PRIMARY KEY (pid, crn),
FOREIGN KEY (pid) REFERENCES professor(pid) ON DELETE CASCADE,
FOREIGN KEY (crn) REFERENCES course(crn) ON DELETE CASCADE
)

crn来自课程表:

CREATE TABLE course(
crn VARCHAR(7),
.........
PRIMARY KEY(crn, .....)
.........
)

pid来自教授表:

CREATE TABLE professor(
pusername VARCHAR(20),
pid VARCHAR(7),
........
PRIMARY KEY(pusername, pid....),
FOREING KEY(pusername) REFERENCES b_user(username) ON DELETE CASCADE,
........
)

b_user跟随

CREATE TABLE b_user (
username VARCHAR(20),
........
PRIMARY KEY(username, .....)
........
)

然而,这个'给'表给了我一个错误:

  

1005 - 无法创建表coursewebgives(错误:150“外键约束形成错误”)

我之前创建过类型,从来没有出错过。唯一不同的是这次我使用那些'ON DELETE CASCADE',当我从b_user删除用户时,它有机会删除链。

我不知道为什么会发生这种情况,我认为我的语法是正确的。

3 个答案:

答案 0 :(得分:1)

来自官方文档here

  

InnoDB允许外键引用任何列或组   列。但是,在引用的表中,必须有一个索引   其中引用的列被列为的第一列   同样的顺序。

换句话说,要向professor.pid提供任何引用/ fk,professor必须包含以pid开头的索引。

答案 1 :(得分:1)

尝试创建表格:

 CREATE TABLE gives (
    pid VARCHAR(7),
    crn VARCHAR(7),
    PRIMARY KEY (pid, crn))

然后添加约束:

ALTER TABLE `gives`
  ADD CONSTRAINT `pid_c` FOREIGN KEY (`pid`) REFERENCES `professor` (`pid`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `crn_c` FOREIGN KEY (`crn`) REFERENCES `course` (`crn`) ON DELETE CASCADE ON UPDATE CASCADE;

答案 2 :(得分:0)

您的FK引用了表教授,但您错误地将该表拼写为proffesor