MySQL添加外键时报错:1215 Cannot add the 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_ref` FOREIGN KEY (`sid`) REFERENCES `sealer` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 

碰到的错误信息如下:

  
无法正确的插入外键约束。

3、问题分析

主外键更多的是某表的主键与子表的某个列进行关联,要求是具备相同的数据类型和属性,问题会不会出现在这里?

要求: 具备相同的数据类型和约束

发现:   unsigned,数字的字符长度不一致。

4、解决的办法

修改product.sid中的数据类型,添加unsigned和字段的长度,将其设置为相同即可。

总结

之所以出现1215的问题,是由于主外键之间的数据类型不一致造成的,以后类似问题,皆可按此处理。以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对我们的支持。

(0)

相关推荐

  • MYSQL建立外键失败几种情况记录Can't create table不能创建表

    像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导. 在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序,已知的原因: 1. 两个字

  • mysql处理添加外键时提示error 150 问题的解决方法

    像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导. 在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序 已知的原因: 1, 两个字

  • 解析MySQL创建外键关联错误 - errno:150

    当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的.像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导. 在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的15

  • MySQL外键创建失败1005原因汇总

    1.安装mysql有InnoDB的插件扩展 ./configure --prefix=/usr/local/mysql --with-plugins=csv,innobase,myisam,heap,innodb_plugin 2.找不到主表中 引用的列 3.主键和外键的字符编码不一致 4.外键字段与要做外键校验的字段类型不匹配 5.MySQL支持外键约束,并提供与其它DB相同的功能,但表类型必须为 InnoDB,非InnoDB 存储引擎会导致报错. 6.建外键的表的那个列没有index.

  • mysql建立外键

    建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键). 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action 例如: outTa

  • 解析在MySQL里创建外键时ERROR 1005的解决办法

    在MySQL里创建外键时,提示错误,但只提示很简单的信息:ERROR 1005 (HY000): Can't create table 'db_qxztc.qx_userssssnew' (errno: 150).根本起不到解决问题的作用. 要看错误的详细提示,可以使用命令:(在MySQL Manual里搜索"errno 150"时找到) SHOW ENGINE INNODB STATUS;     //针对用INNODB存储方式的数据库 在信息中有一组[LATEST FOREIGN

  • mysql外键(Foreign Key)介绍和创建外键的方法

    在MySQL中,InnoDB引擎类型的表支持了外键约束.外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持):2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立:3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作

  • MySQL外键使用详解

    最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键. (1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持外键约束 (2)外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作: (3)外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! (4)建立外键的前提: 两个表必须是InnoDB表类型. 使用在外键关系的域必须为索

  • 深入mysql外键关联问题的详解

    今儿继续再看老师给推荐的深入浅出mysql数据库开发这本书,看到innodb数据库的外键关联问题时,遇到了一个问题,书上写的是可以对父表进行修改,从而同步到子表的外键上去,可是自己的实验却是没有能够. 复制代码 代码如下: mysql> show create table country\G*************************** 1. row ***************************       Table: countryCreate Table: CREATE

  • MySQL 创建主键,外键和复合主键的语句

    1.创建主键语法 ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名); 2.创建外键语法 ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ; 3.使用组合主键 如果一列不能唯一区分一个表里的记录时,可以考虑多个

随机推荐