[英]MySQL FOREIGN KEY error, ON DELETE CASCADE
我完全不知道为什么MySQL在第二个CREATE TABLE
语句上有问题。
CREATE TABLE User(
uid INTEGER,
url CHAR(100),
firstname CHAR(40),
lastname CHAR(40),
PRIMARY KEY(uid)
);
以下是导致问题的原因:
CREATE TABLE Follows(
uid INTEGER,
url CHAR(100),
PRIMARY KEY(uid,url),
FOREIGN KEY(uid) REFERENCES User(uid), ON DELETE CASCADE,
FOREIGN KEY(url) REFERENCES User(url), ON DELETE CASCADE
);
我得到的错误是:
#1064-您的SQL语法有误; 请在第1行的“ ON DELETE CASCADE,FOREIGN KEY(URL)参考用户(URL),ON DELETE CASCADE)附近检查与您的MySQL服务器版本相对应的手册以使用正确的语法”
这里有一些问题:
首先, on delete cascade
是外键定义的一部分,因此应删除其前的逗号( ,
)。
其次,第二个外键引用url
,它不是唯一键,因此是不允许的。 因此,要么删除此约束:
CREATE TABLE Follows (
uid INTEGER,
url CHAR(100),
PRIMARY KEY(uid,url),
FOREIGN KEY(uid) REFERENCES User(uid) ON DELETE CASCADE
);
或在url
上定义另一个唯一键:
CREATE TABLE User(
uid INTEGER,
url CHAR(100),
firstname CHAR(40),
lastname CHAR(40),
PRIMARY KEY(uid),
UNIQUE (url)
);
CREATE TABLE Follows (
uid INTEGER,
url CHAR(100),
PRIMARY KEY(uid,url),
FOREIGN KEY(uid) REFERENCES User(uid) ON DELETE CASCADE,
FOREIGN KEY(url) REFERENCES User(url) ON DELETE CASCADE
);
尝试在引用用户(uid)和引用用户(url)之后删除此“,”
您必须在User(uid)ON DELETE CASCADE后面加上一个空格,也应该像这样写到查询的末尾:engine ='innodb';
我是说在最后)和;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.