错误代码: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)
);
最佳答案
外键列的数据类型必须与引用表中引用(通常是主键)列的数据类型匹配。
当我们尝试创建违反此限制的外键约束时,错误 1215 是预期的行为。
根据MySQL引用手册https://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html
SERIAL
是 BIGINT UNSIGNED NOT NULL AUTO_INCRMENT 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)
);
关于mysql - mysql无法创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177217/