Невозможно создать внешний ключ mysql

0

Код ошибки: 1215: невозможно добавить ограничение внешнего ключа

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

SET default_storage_engine=ENGINE

Но я не могу создать это ограничение внешнего ключа. Я использую Mysql 5.5. Любой может помочь мне.

create table if not exists pallets(
    palletId serial,
    goodsType varchar(25),
    desitination varchar(25),
    primary key (palletId)
);
create table if not exists storage(
    id serial,
    palletId integer,
    primary key (id),
    constraint FK _Pallet foreign key (palletId) REFERENCES pallets(palletId)
);
  • 1
    2 столбца должны иметь одинаковый тип данных. Integer не совпадает с serial . Поэтому попробуйте bigint unsigned вместо integer (или используйте integer в pallets ).
Теги:
foreign-keys
unique-constraint

2 ответа

2
Лучший ответ

Тип данных столбца (ов) внешнего ключа должен соответствовать типу данных ссылочного (обычно первичного ключа) столбца (ов) в ссылочной таблице.

Ошибка 1215 - это ожидаемое поведение, когда мы пытаемся создать ограничение внешнего ключа, которое нарушит это ограничение.

Согласно Справочному руководству MySQL https://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html

SERIAL является псевдонимом для BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.


Таким образом, определение таблицы для pallets эквивалентно:

create table pallets
( palletId   BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
  --         ^^^^^^^^^^^^^^^  
, ...
, primary key (palletId)
);

Ссылка на внешний ключ должна иметь тот же тип данных BIGINT UNSIGNED

например

create table storage
( id ...
, palletId   BIGINT UNSIGNED 
  --         ^^^^^^^^^^^^^^^
, primary key (id)
, constraint FK_storage_pallets foreign key (palletId) REFERENCES pallets(palletId)
);
  • 0
    Спасибо @ spencer7593 это сработало.
0

Этот вопрос ранее задавался в переполнении стека, вы можете проверить их: Код ошибки: 1215. Невозможно добавить ограничение внешнего ключа (внешние ключи)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню