2015-06-07 3 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 , стоимость РЕАЛ , ПЛА CHAR (11) NOT NULL , PRIMARY KEY (PNAME, ССН), FOREIGN KEY (ПЛА) ЛИТЕРАТУРА Сотрудники, 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) ССЫЛКИ User (uid) ON DELETE CASCADE, FOREIGN KEY (url) ССЫЛКИ User (url) ВКЛЮЧИТЬ КАСКАД); – Kelbe

0

вы должны поставить пробел после пользователя (UID) ON DELETE CASCADE, также вы должны написать в к конец запроса выглядит так: engine = 'innodb';

Я имею в виду между последним) и;

Смежные вопросы