Ошибка внешнего ключа в операторе MySQL CREATE TABLE (ошибка: 150) - PullRequest
2 голосов
/ 19 марта 2011

Мне кажется, что я попробовал все возможное на очень простой паре операторов создания таблиц.

Типы совпадают, я пытался использовать ENGINE = InnoDB и т. Д., И я озадачен, почему я получаю внешний ключошибка.

Я некоторое время отсутствовал в SQL, так что это, вероятно, легко.

mysql> CREATE TABLE foo_ent(yyy_no VARCHAR(80),
    -> zoo VARCHAR(80),
    -> PRIMARY KEY (yyy_no));
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE cat_ent(some_item INTEGER,
    -> yyy_no VARCHAR(80),
    -> apple DECIMAL(6,2),
    -> PRIMARY KEY (some_item),
    -> FOREIGN KEY (yyy_no) REFERENCES foo_ent);
ERROR 1005 (HY000): Can't create table 'test.cat_ent' (errno: 15
0)

Извините за плохие имена переменных, безопасные для перезаписи материала компании.

Ответы [ 3 ]

2 голосов
/ 19 марта 2011

Вы не ссылаетесь на поле, только на таблицу, что неверно.

...
foreign key (yyy_no) references foo_ent(yyy_no)

И, согласно вашему номеру ошибки, в документации MySQL также указано:

Если вы воссоздаете таблицу, которая была упал, оно должно иметь определение соответствует внешнему ключу ограничения, ссылающиеся на это. Это должно иметь правильные имена и типы столбцов, и он должен иметь индексы на ссылочные ключи, как указано ранее. Если они не удовлетворены, MySQL возвращает ошибка номер 1005 и относится к ошибке 150 в сообщении об ошибке.

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

0 голосов
/ 19 марта 2011

Попробуйте переписать объявление FOREIGN KEY, чтобы явно перечислить столбец в foo_ent, для которого вы хотите ввести ключ:

CREATE TABLE cat_ent (some_item INTEGER, yyy_no VARCHAR (80), apple DECIMAL (6,2),PRIMARY KEY (some_item), FOREIGN KEY (yyy_no) ССЫЛКИ foo_ent (yyy_no)) ENGINE = InnoDB;

работает для меня.

0 голосов
/ 19 марта 2011

Вы должны явно указать имя столбца, на который есть ссылка:

CREATE TABLE cat_ent
        (
        some_item INTEGER NOT NULL,
        yyy_non VARCHAR(80),
        apple DECIMAL(6,2),
        PRIMARY KEY (some_item),
        FOREIGN KEY (yyy_non) REFERENCES foo_ent(yyy_no)
        );
...