无法创建外键 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
SERIAL
是 BIGINT 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)
);
错误代码: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
SERIAL
是 BIGINT 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)
);