2016-03-04 2 views
1

У меня возникла странная проблема, когда я хочу создать таблицу с внешним ключом.Почему UNSIGNED не может использоваться для FOREIGN KEY в MYSQL?

Пожалуйста, обратитесь к следующему результату:

mysql> CREATE TABLE IF NOT EXISTS TL_USER(
    -> user_id INT(10) UNSIGNED NOT NULL PRIMARY KEY, 
    -> nickname VARCHAR(45) NULL 
    -> ) ENGINE = InnoDB; 
Query OK, 0 rows affected (0.01 sec) 

mysql> CREATE TABLE IF NOT EXISTS TL_EVENT_COMMENT (
    -> event_comment_id INT PRIMARY key , 
    -> comment VARCHAR(45) NULL, 
    -> user_id INT NULL, 
    -> FOREIGN KEY (`user_id`) REFERENCES TL_USER (`user_id`) 
    -> ) ENGINE = InnoDB; 

ERROR 1005 (HY000): Невозможно создать таблицу '' TL_EVENT_COMMENT (ERRNO: 150)

, когда я меняю «user_id INT (10) НЕОПРЕДЕЛЕННЫЙ НЕ НУЛЬНЫЙ ПЕРВИЧНЫЙ КЛЮЧ« to »user_id INT (10) NOT NULL PRIMARY KEY», оно работает.

mysql> CREATE TABLE IF NOT EXISTS TL_USER(
    -> user_id INT(10) NOT NULL PRIMARY KEY, 
    -> nickname VARCHAR(45) NULL 
    -> ) ENGINE = InnoDB; 
Query OK, 0 rows affected (0.01 sec) 

mysql> CREATE TABLE IF NOT EXISTS TL_EVENT_COMMENT (
    -> event_comment_id INT PRIMARY key , 
    -> comment VARCHAR(45) NULL, 
    -> user_id INT NULL, 
    -> FOREIGN KEY (`user_id`) REFERENCES TL_USER (`user_id`) 
    -> ) ENGINE = InnoDB; 
Query OK, 0 rows affected (0.02 sec) 

проблема когда я добавить UNSIGNED для user_id, я получаю эту ошибку, если я не добавляю, он работает, может кто-нибудь объяснить, почему UNSIGNED не может быть использована для FOREIGN KEY?

Как я могу заставить его работать?

MYSQL версия 5.5.47-0ubuntu0.14.04.1.

+0

Действительно, я так небрежен! спасибо. – seaguest

ответ

5

Рефери должен быть одинаков. Если вы добавляете unsigned в main, то внешний ключ также должен быть неподписанным и наоборот. Тип и определение полей должны совпадать.

Я знаю, что иногда это боль, поэтому вам нужно быть последовательным, особенно при работе со многими таблицами. Например, сделайте для себя правило, чтобы все первичные ключи были UNSIGNED INT (11), поэтому вам не нужно угадывать, какое определение использовать для внешнего ключа.

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