MySQL 外键错误,删除级联
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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON DELETE CASCADE, FOREIGN KEY(url) REFERENCES User(url), ON DELETE CASCADE)' at line 1
尝试在 REFERENCES User(uid) 和 REFERENCES User(url) 之后删除这个 ","
这里有几个问题:
首先 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
);
你必须在 User(uid) ON DELETE CASCADE 之后留一个空隙,你也应该像这样写到查询的末尾:engine='innodb';
我的意思是在最后一个 ) 和 ; 之间
我完全不知道为什么 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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON DELETE CASCADE, FOREIGN KEY(url) REFERENCES User(url), ON DELETE CASCADE)' at line 1
尝试在 REFERENCES User(uid) 和 REFERENCES User(url) 之后删除这个 ","
这里有几个问题:
首先 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
);
你必须在 User(uid) ON DELETE CASCADE 之后留一个空隙,你也应该像这样写到查询的末尾:engine='innodb';
我的意思是在最后一个 ) 和 ; 之间