无法创建外键mysql

ha5z0ras  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(403)

错误代码:1215:无法添加外键约束

我尝试了所有的选择,比如使用

SET default_storage_engine=ENGINE

但我无法创建外键约束。我正在使用MySQL5.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)
);
vaj7vani

vaj7vani1#

如果使用串行数据类型作为主键,则外键应为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)
);
ehxuflar

ehxuflar2#

外键列的数据类型必须与被引用表中被引用(通常是主键)列的数据类型匹配。
错误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)
);
pn9klfpd

pn9klfpd3#

这个问题以前在堆栈溢出中被问过,您可能想检查一下:错误代码:1215。无法添加外键约束(外键)

相关问题