Ошибка иностранного ключа на MySQL CREATE TABLE оператор (ERR: 150)

StackOverflow https://stackoverflow.com/questions/5357936

Вопрос

Я чувствую, что пробовал все возможное на очень простой паре создания табличных операторов.

Типы совпадают, я попытался использовать 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)

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

Это было полезно?

Решение

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

...
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

Другие советы

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

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)
        );

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

Создать таблицу Cat_ent (some_item Integer, yyy_no varchar (80), Apple Decimal (6,2), первичный ключ (some_item), иностранный ключ (yyy_no) ссылки foo_ent (yyy_no)) innodb;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top