MySQL无法创建外键错误 Err 1215: Cannot add the foreign key constraint

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzw2016/article/details/82822222

今天在写数据库作业时,遇到的无法创建外键问题

create table department
	(dept_name		varchar(20), 
	 building		varchar(15), 
	 budget		        numeric(12,2) check (budget > 0),
	 primary key (dept_name)
	);
	
create table course
	(course_id		varchar(8), 
	 title			varchar(50), 
	 dept_name		varchar(20),
	 credits		numeric(2,0) check (credits > 0),
	 primary key (course_id),
	 foreign key (dept_name) references department
		on delete set null
	);

需要了解几点,什么是主键外键?自己查;约束?表的主键和其他表的外键关联时,要求数据类型和属性都相同

嗯,我确认了一遍,类型和属性都相同。最后发现是 reference 后面只有父表的名,却没有对应列的信息references department。改成references department(dept_name) 就好了(建表SQL文件是从SQLserver拿过来的,语法不同吧)。

常见几种无法创建外键的可能

  • 父表不存在
    • 先创建父表,再创建子表;
    • SET FOREIGN_KEY_CHECKS=0; 后,创建子表,再创建父表;SET FOREIGN_KEY_CHECKS=1;
  • 标点符号使用不对
  • 对应列名拼错
  • 对应列的数据类型和属性不一致
  • 父表和子表 表(或列)的字符集 或 排序集 不同
  • 父表中相关列上没有任何索引
  • 父表相关列有索引,但索引是一个多列索引,同时该列不是该做索引最左列
  • 父表不是innodb
  • 父表是分区表
  • MySQL5.7以上,父表中相应列是虚拟列,不是实际存储列
  • reference 后面没有列信息
  • 对约束操作使用 SET DEFAULT

你可以创建失败时,使用 SHOW ENGINE INNODB STATUS\G ,显示更多具体的错误信息,而非仅仅Err 1215.

详细疑问解释和解决方法可参考:Dealing with MySQL Error Code 1215: “Cannot add foreign key constraint”

猜你喜欢

转载自blog.csdn.net/lzw2016/article/details/82822222
今日推荐