Я пробовал все параметры, такие как изменение механизма хранения по умолчанию, используя
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)
);
Тип данных столбца (ов) внешнего ключа должен соответствовать типу данных ссылочного (обычно первичного ключа) столбца (ов) в ссылочной таблице.
Ошибка 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)
);
Этот вопрос ранее задавался в переполнении стека, вы можете проверить их: Код ошибки: 1215. Невозможно добавить ограничение внешнего ключа (внешние ключи)
Integer
не совпадает сserial
. Поэтому попробуйтеbigint unsigned
вместоinteger
(или используйтеinteger
вpallets
).