无法创建外键 mysql

Unable to create foreign key mysql

错误代码: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)
);

这个问题之前在 stack overflow 中被问过,你可能想检查那些:Error Code: 1215. Cannot add foreign key constraint (foreign keys)

外键列的数据类型必须匹配被引用table中被引用(通常是主键)列的数据类型。

错误 1215 是我们尝试创建违反此限制的外键约束时的预期行为。

根据 MySQL 参考手册 https://dev.mysql.com/doc/refman/5.6/en/numeric-type-overview.html

SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.

的别名

因此 pallets 的 table 定义等同于:

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)
);

如果您使用 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)
);