Ошибка иностранного ключа на MySQL CREATE TABLE оператор (ERR: 150)
-
27-10-2019 - |
Вопрос
Я чувствую, что пробовал все возможное на очень простой паре создания табличных операторов.
Типы совпадают, я попытался использовать 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;
работает на меня.