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

我的意思是在最后一个 ) 和 ; 之间