我尝试了所有选项,例如使用
更改默认存储引擎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)
);
答案 0 :(得分: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
e.g。
create table storage
( id ...
, palletId BIGINT UNSIGNED
-- ^^^^^^^^^^^^^^^
, primary key (id)
, constraint FK_storage_pallets foreign key (palletId) REFERENCES pallets(palletId)
);
答案 1 :(得分:0)
之前已经在堆栈溢出中询问过此问题,您可能需要检查这些问题:Error Code: 1215. Cannot add foreign key constraint (foreign keys)
答案 2 :(得分:0)
如果您将SERIAL数据类型用作主键,则外键应为BIGINT UNSIGNED
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 bigint unsigned,
primary key (id),
constraint FK _Pallet foreign key (palletId) REFERENCES pallets(palletId)
);