Mysql创建table时报错ERROR 1215 (HY000)/ Cannot add foreign key constraint

一、错误提示

ERROR 1215 (HY000): Cannot add foreign key constraint

二、过程描述

1.先是创建如下表
#创建学生表 
Create TABLE Student
	(Sno CHAR(9) PRIMARY KEY not null,	/*列级完整性约束,Sno是主码*/
   Sname CHAR(20) not null,
   Ssex CHAR(2),
   Sage SMALLINT,
   Sdept CHAR(20)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;/*指定字符集的编码方式为utf8,以便后续插入汉字型元组数据*/
2.然后创建如下表
#创建课程表
create table Course
	(Cno CHAR(4) PRIMARY KEY not null,	/*列级完整性约束,Sno是主码*/
   Cname char(40) NOT NULL,
   Cpno CHAR(4),										  /*Cpno是先修课*/
   Ccredit SMALLINT,
   FOREIGN KEY (Cpno) REFERENCES Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照对象是Cource,被参照列是Cno*/
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.然后创建如下表
#创建选课表
CREATE TABLE SC
	(Sno CHAR(9)  not null ,
   Cno CHAR(4)  not null ,
   Grade SMALLINT,
   primary key (sno,cno),
   foreign key (Sno) references Student(sno),
   foreign key (Cno) references Course(cno)
  );
4.在创建SC数据表时,报错如下
ERROR 1215 (HY000): Cannot add foreign key constraint
  • 报错释义:不能添加外键约束
  • 报错原因:因为SC数据表依赖于Student和Course表,但是Student和Course表的字符集编码方式指定为utf8(为了插入含中文的元组数据),而SC表的默认字符集编码方式为latin1,导致数据表引擎enging不匹配,故而报错。
三、解决
1.创建SC数据表时,也指定字符集编码方式为utf8
#创建选课表
CREATE TABLE SC
	(Sno CHAR(9)  not null ,
   Cno CHAR(4)  not null ,
   Grade SMALLINT,
   primary key (sno,cno),
   foreign key (Sno) references student(sno),
   foreign key (Cno) references Course(cno)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;
四、其他可能引起ERROR 1215 (HY000)报错的原因
  • 数据表单个属性列的数据类型不一致,就会引起该报错。这时只需要修改单个属性列的数据类型为一致即可
  • 数据库主从表字符集不同
    • 上述过程描述中引起的报错,是在创建表时,整个数据表的字符集编码方式不一致导致的;也就是多个表中相关列的数据类型不一致
    • MySQL查看和修改字符集的方法
  • 数据表引擎enging不匹配造成

参考:

1.MySQL : ERROR 1215 (HY000): Cannot add foreign key constraint

2.ERROR 1215 (HY000): Cannot add foreign key constraint

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常表示您正在尝试创建一个外键约束,但是它无法成功添加到您的表中。常见的原因有: 1. 外键引用的主键列的数据类型或长度不匹配。确保外键列与引用列的数据类型和长度相同。 2. 外键列中存在重复值。确保外键列中的所有值都是唯一的。 3. 外键列中有空值。如果引用表中的主键列不允许空值,则必须确保外键列中没有空值。 4. 引用表中的主键列不存在。确保引用表中存在一个具有主键约束的列,并且列名正确。 5. 外键约束名称与现有约束名称冲突。如果您使用了自定义名称,请确保它与现有约束名称不冲突。 6. 引用表或外键表使用了不同的存储引擎。确保引用表和外键表都使用相同的存储引擎。 希望这些提示能够帮助您解决这个问题! ### 回答2: 在MySQL中,外键是用于建立表之间关系的一种约束。当我们在创建,如果需要设置外键约束,那么需要遵循一些规则和限制。在这个过程中,错误1215 (HY000)就是一个比较常见的错误。 这个错误表示无法添加外键约束,通常是由于以下一些原因: 1. 数据类型不同。外键和主键的数据类型必须一致,否则无法建立外键约束。 2. 约束命名不正确。在添加外键约束,它必须具有唯一的名称。如果您在程序中使用了相同的名称来命名多个外键,那么就会发生错误。 3. 表中的数据不一致。如果您的表中的数据不一致,那么就无法建立外键约束。如果您尝试将一个无效的值分配给外键,那么MySQL就会报错。 4. 存在一个表受其它表约束的外键。如果您尝试在该子表中创建一个外键约束,则会发生错误。表之间的关系可能会变得复杂,因此您需要仔细检查表之间的关系并遵循正确的约束顺序。 5. 表之间的引擎不同。如果表之间的引擎不同,那么就可能无法建立外键约束。如果您的主表使用MyISAM存储引擎,而子表使用InnoDB存储引擎,则无法创建外键约束。 为了避免此错误,您需要仔细检查表结构、表之间的关系和数据类型,并确保您已正确命名外键约束。如果发现错误,您可以通过更改表结构或表之间的关系等方式来解决问题。 ### 回答3: Error 1215 (HY000): Cannot add foreign key constraintMySQL数据库中常见的一个错误。它通常出现在尝试在表之间创建外键约束,该约束无法成功创建的情况下。 这个错误的原因可能是多种多样的。一些常见的原因包括: 1. 确保在两个表中使用的列的数据类型相同 当您尝试创建外键约束,必须确保在您的两个表中使用的列的数据类型是相同的。如果列之间的数据类型不相同,它就会出现Error 1215 (HY000)。 2. 确保在被引用表中仅使用唯一ID 如果在被引用表中使用了重复的ID,就无法创建外键约束。如果您尝试使用一个已经存在的ID在被引用表中创建一个新的记录,MySQL无法判断应该使用哪个记录作为外键的参考。 3. 确保在被引用表中正确地设置了主键 要创建外键约束,必须对被参照表的列设置主键。如果被参照表没有主键或主键没有启用,则无法创建外键约束。 4. 确保表的存储引擎相同 在MySQL中,存储引擎指定将数据存储在磁盘上使用的算法。如果被参照表使用MyISAM存储引擎,而当前表使用InnoDB存储引擎,则无法创建外键约束。 要解决Error 1215 (HY000)错误,您必须仔细检查您的列和表是否设置正确。您应该确保在被参照表和当前表中使用相同的数据类型、唯一的ID和正确设置的主键。此外,检查两个表是否使用相同的存储引擎也非常重要。如果这些问题都得到解决,您就可以成功地创建外键约束了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值