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