报错原因1: 主键与外键的字符类型不匹配

首先创建两张如下的表然后执行,发现two表创建失败,检查之后分析原因得出是因为主键与外键的字符类型不匹配,one表的id是int类型,two表的tid是char(10)类型,这时只要改为一致的字符类型就解决问题了。 如果发现自己创建的表,主键外键字符类型一样,那就考虑其它可能,请接着看。

create table one(
	id int primary key,
	oname VARCHAR(30)
);
create table two(
	tid char(10),
	tname VARCHAR(30),
	constraint t_o_sk foreign key (tid) references one(id) on delete cascade on update cascade  
##on delete cascade是级联删除,on update cascade 是级联更新
);

报错原因2:主表的主键不是primary key 如果是的话,表又创建好了,那么可以用alter进行修改即可。 这种问题发现没有解决问题的话,那可能下面的考虑第三种情况了。

alter table one modify id  int primary key;

报错原因3:检查字符编码是否一致

报错原因4:找不到外键引用的列 列在增加外键的时候,可能已经存在数据了(历史数据,或者更新数据库表时设置的默认值),但这些数据并不一定能在外键关联表中找到对应的行记录。这种情况也会导致外键创建失败。