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

猜你喜欢

转载自blog.csdn.net/szw_yx/article/details/104695320
今日推荐