MySQL添加外键时报错:1215 Cannot add the foreign key
前言 这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下。 一、问题
前言
这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下。
一、问题的提出
创建两个表:
product: 商品表
sealer: 供货商表
相应的SQL如下:
product表:
DROP TABLE IF EXISTS product
;
CREATE TABLE product
(
id
bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name
varchar(20) NOT NULL COMMENT 'product name',
price
float(10,3) NOT NULL,
description
varchar(20) DEFAULT NULL,
count
int(11) NOT NULL DEFAULT '0',
sid
int(11) NOT NULL,
PRIMARY KEY (id
),
UNIQUE KEY id_index
(id
) USING HASH,
UNIQUE KEY sid_index
(sid
) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sealer表:
DROP TABLE IF EXISTS sealer
;
CREATE TABLE sealer
(
id
bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name
varchar(30) NOT NULL,
city
varchar(255) DEFAULT NULL,
created_time
datetime DEFAULT NULL,
updated_time
datetime DEFAULT NULL,
level
int(11) NOT NULL DEFAULT '0',
description
varchar(40) DEFAULT NULL,
PRIMARY KEY (id
),
UNIQUE KEY id_index_1
(id
) USING HASH
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
接下来我们需要关联product.sid 至 sealer.id,进行父子表的主外键关联。
二、碰到错误
在创建外键之时,使用的SQL和碰到错误信息如下:
alter table product' add CONSTRAINT
sid_refFOREIGN KEY (
sid) REFERENCES
sealer(
id`) ON DELETE NO ACTION ON UPDATE NO ACTION
碰到的错误信息如下:
无法正确的插入外键约束。
3、问题分析
主外键更多的是某表的主键与子表的某个列进行关联,要求是具备相同的数据类型和属性,问题会不会出现在这里?
要求: 具备相同的数据类型和约束
发现: unsigned,数字的字符长度不一致。
4、解决的办法
修改product.sid中的数据类型,添加unsigned和字段的长度,将其设置为相同即可。
总结
之所以出现1215的问题,是由于主外键之间的数据类型不一致造成的,以后类似问题,皆可按此处理。以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对每日运维的支持。