mysql数据库:外键错误

9wbgstp7  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(257)

因此,我尝试创建一个表,如下所示:

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来自professor表,即:

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

用户如下

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

但是,这个“gives”表给了我一个错误:

1005-无法创建courseweb.gives表(errno:150“外键约束格式不正确”)

我以前创造过各种类型的赠品,从来没有出错过。唯一不同的是,这次我使用了“on delete cascade”,当我从b\u用户中删除一个用户时,它提供了一个链删除的机会。
我不知道为什么会这样,我认为我的语法是正确的。

k0pti3hp

k0pti3hp1#

你的fk引用了表professor,但是你把表拼写错了professor

fdbelqdn

fdbelqdn2#

尝试创建表:

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;
j2cgzkjk

j2cgzkjk3#

从这里的官方文件
innodb允许外键引用任何列或列组。但是,在引用的表中,必须有一个索引,其中引用的列按相同顺序列为第一列。
换句话说,有任何参考/fk professor.pid , professor 必须包含以开头的索引 pid .

相关问题