2015-09-03 5 views
0

Iam пытается сделать поле «in_reply_to» в столбце «Столбец» нулевым внешним ключом, который ссылается на поле id в той же таблице. В принципе, если это поле равно null, сообщение не является ответом на другое сообщение - если оно не равно null, то сообщение является ответом на сообщение с идентификатором соответствия, если это имеет смысл. Но когда я запускаю свой файл через mysql, я получаю следующую ошибку.MySQL создает нулевой допустимый внешний ключ, который ссылается на поле id в той же таблице

ERROR 1064 (42000): У вас есть ошибка в синтаксисе SQL; в руководстве, соответствует версии сервера MySQL для правильного синтаксиса использовать вблизи '(160) , FOREIGN KEY (идентификатор пользователя) ссылки пользователей (USERID), FOREIGN KEY (in_reply_' в строке 6 Query OK, 0 затронутых строк (0,36 сек)

Так что сказать что-то не так с командами, которые я написал, но я не могу точно определить, что IAM делает неправильно.

Вот содержимое файла SQL

CREATE DATABASE siteData CHARACTER SET utf8 COLLATE utf8_general_ci; 

USE siteData; 

CREATE TABLE users (
userID INT PRIMARY KEY AUTO_INCREMENT, 
name VARCHAR(40), 
email VARCHAR(40), 
password VARCHAR(125) 
); 

CREATE TABLE post (
postID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
userID INT, 
post_date TIMESTAMP(6), 
in_reply_to INT NOT NULL, 
postContent(160), 
    FOREIGN KEY (userID) REFERENCES users(userID), 
    FOREIGN KEY (in_reply_to) REFERENCES post(postID) 
); 

CREATE TABLE follow (
userID INT, 
followerID INT, 
PRIMARY KEY (userID,followerID), 

FOREIGN KEY (userID) 
     REFERENCES users(userID), 
FOREIGN KEY (followerID) 
     REFERENCES users(userID) 
); 

если у вас есть указатели на то, как заставить ссылку ссылаться на идентификатор сообщения, я был бы признателен.

+0

Ошибка 'PostContent (160),', я предположил бы, это должно быть 'PostContent VARCHAR (160),'. Ваши фактические внешние ключи в порядке. Хотя я бы предположил, что вы хотите, чтобы 'in_reply_to' не был нулевым -' in_reply_to INT NULL', а не 'in_reply_to INT NOT NULL,' – GarethD

+0

Спасибо, я не могу поверить, что это было настолько глупо, что я забыл. – MrKeyboard

+0

благодарю за вашу помощь и советы, я запустил ее и никаких ошибок :) – MrKeyboard

ответ

1

Проблема не в иностранном ключе. Вы не указали тип для столбца postContent.

Пожалуйста, измените

postContent(160), 

к, например,

postContent varchar(160), 

Если вы хотите, чтобы ваша колонка in_reply_to быть обнуляемой, пожалуйста, измените

in_reply_to INT NOT NULL, 

в

in_reply_to INT, 
+0

Такая глупая ошибка, спасибо Марио за вашу помощь и советы. Исправлено без ошибок! – MrKeyboard

1

Существует недостающее Datatype полевого PostContent в сообщении табл. Но это неправильный способ сделать внешний ключ недействительным. Все еще есть трюк, чтобы сделать это. Вы можете проверить следующую ссылку.

Foreign keys and NULL in mySQL

+0

Thankyou, плохо проверьте это – MrKeyboard

+0

Вас приветствуют. – Sumit

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

  • Нет связанных вопросов^_^