因此,我尝试创建一个表,如下所示:
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用户中删除一个用户时,它提供了一个链删除的机会。
我不知道为什么会这样,我认为我的语法是正确的。
3条答案
按热度按时间k0pti3hp1#
你的fk引用了表professor,但是你把表拼写错了professor
fdbelqdn2#
尝试创建表:
然后添加约束:
j2cgzkjk3#
从这里的官方文件
innodb允许外键引用任何列或列组。但是,在引用的表中,必须有一个索引,其中引用的列按相同顺序列为第一列。
换句话说,有任何参考/fk
professor.pid
,professor
必须包含以开头的索引pid
.