所以我试图创建一个表格如下:
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 - 无法创建表
courseweb
。gives
(错误:150“外键约束形成错误”)
我之前创建过类型,从来没有出错过。唯一不同的是这次我使用那些'ON DELETE CASCADE',当我从b_user删除用户时,它有机会删除链。
我不知道为什么会发生这种情况,我认为我的语法是正确的。
答案 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