MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法_Mysql

前言

这篇文章主要涉及到在数据创建表时,遇到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的问题,是由于主外键之间的数据类型不一致造成的,以后类似问题,皆可按此处理。以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对的支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql
, 外键
, error
, 1215
1215解决办法
foreignkeyconstraint、add constraint、mysql add constraint、sql add constraint、addconstraint,以便于您获取更多的相关知识。

时间: 2024-08-08 06:05:14

MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法_Mysql的相关文章

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

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

mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解决方法_Mysql

今天在检查mysql服务器的时候提示Sort aborted: Out of sort memory, consider increasing server sort buffer size,安装字面意思就是 sort内存溢出,考虑增加服务器的排序缓冲区(sort_buffer_size)大小 sort_buffer_size=3M join_buffer_size = 3M 下面是针对16G 内存设置的参数: sort_buffer_size = 2M # Sort_Buffer_Size 是

mysql中You can’t specify target table for update in FROM clause错误解决方法_Mysql

mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中). 例如下面这个sql: 复制代码 代码如下: delete from tbl where id in (         select max(id) from tbl a where EXISTS         (             select 1 from tbl b

Navicatfor Mysql中添加外键方法

环境:NavicatforMysql 8.2 + MySQL Sever 5.1 问题:NavicatforMysql中添加外键 解 决: 方法一: 使用SQL语句创建外键: alter table 外键表 add constraint 约束 名 foreign key(栏位名) references 参照表(外键栏位名) on delete restrict/set null/cascade on update restrict/set null/ cascade; 不指定外键的名称,mysq

MySQL MyISAM 添加外键失败

MySQL 在做某个表的外键关联时,提示如下错误 1215 - Cannot add foreign key constraint 后查,该表的存储引擎为 MyISAM 在 MySQL 的官方文档中提到,MyISAM 是 不支持外键的,"Foreign key support No". Storage limits 256TB Transactions No Locking granularity Table MVCC No Geospatial data type support Y

mysql的外键与自增矛盾了

问题描述 mysql的外键与自增矛盾了 问题很简单:table A中的属性aid是自增的主键:table B中的属性bid是自增的主键,引用A中的aid作为外键.那么,B中的aid如果设为自增,B中就有两个自增,是不行的:如果不设为自增,又与A中的aid自增矛盾.请问这个问题怎么解决? 解决方案 原来是navicat软件的问题,直接用sql语句是没问题的 解决方案二: b.aid为什么要自增? 主键与外键 解决方案三: 它是引用A中的aid,设置要与a中的一样,要不会报错.

MySQL删除外键问题小结_Mysql

MySQL:MySQL不能删除外键,抱错Error on rename of ./ruler/test2child to ./ruler/#sql2-298-92 (errno: 152) 曾经这是MySQL的一个bug,但是现在只是MySQL的一个不友好的地方. 例子如下: mysql> ALTER TABLE ruler.test2child DROP FOREIGN KEY test; ERROR 1025 : Error on rename of ''./ruler/test2child

button-为Button添加监听时报错

问题描述 为Button添加监听时报错 package com.example.jisuanji; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.vie

ldap-关于Java操作Ldap,添加用户/用户组时报错

问题描述 关于Java操作Ldap,添加用户/用户组时报错 public static void addUser() { String parentDN = "CN=Users,DC=jovaunn,DC=com"; String childName = "lj1Group"; String childDN = "CN=" + childName + "," + parentDN; Attribute cn = new Bas