2015-06-07 72 views
0

我完全不知道爲什麼MySQL對第二個CREATE TABLE聲明有問題。MySQL FOREIGN KEY錯誤,ON DELETE CASCADE

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

+4

在ON DELETE之前刪除逗號','。該選項是前面FOREIGN KEY約束定義的一部分,因此在同一行中不顯示逗號。一般來說,當MySQL指向「靠近使用的正確語法」時,請在單引號之前立即查找字符。這有助於除非消息以單引號結尾,在這種情況下,錯誤發生在您的語句結尾。 –

+0

@Kelbe:http://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html –

+0

這很奇怪,因爲我跟着一個例子,它使用FOREIGN和逗號,然後ON DELETE。看起來是這樣的: CREATE TABLE Dep_Policy( PNAME CHAR(20) , 年齡 INTEGER , 成本 REAL , SSN CHAR(11)NOT NULL , PRIMARY KEY (PNAME,SSN ), 外鍵 (SSN) 參考 僱員, ON DELETE CASCADE ) http://pages.cs.wisc.edu/~dbbook/openAccess/firstEdition/slides/pdfs lides/mod5l1-2.pdf – Kelbe

回答

1

這裏有幾個問題:

首先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 
); 
+0

工作正常!謝謝。如果不適合你,我會被困在那裏好幾天。 – Kelbe

0

嘗試後參考用戶(UID)刪除並參考用戶(URL)這個「,」

+0

我試過了,它給出了同樣的錯誤。這是我試過的:CREATE TABLE Follows(uid INTEGER,url CHAR(100),PRIMARY KEY(uid,url),FOREIGN KEY(uid)REFERENCES User(uid)ON DELETE CASCADE,FOREIGN KEY(url) )ON DELETE CASCADE); – Kelbe

0

你必須把差距用戶(UID)ON DELETE CASCADE後,你也應該寫入查詢結束如下所示:engine ='innodb';

我是指最後一個)和;