mysql - mysql无法创建外键

标签 mysql sql foreign-keys unique-constraint

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

SERIALBIGINT 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/

相关文章:

php - WordPress停止循环获取帖子

mysql - 由于重叠日期从 MySQL 表中删除冗余条目

MySql 外键约束,错误 1005

sql - 外键约束的条件级联操作?

sql-server - 如何删除引用表的所有 FK 约束并将它们添加回来?

Android studio 报错Okhttp3 点击按钮后无法上传音频文件

php - 通过 jquery 显示 html 选择(来自 PHP)?

java - 在 MyBatis 中添加一个项目列表,在 SQL 列中共享一个值

mysql - 合并表而不是相交

php - 连接PHP与mySQL的问题