总得来说是因为两个表的字段类型不一致,例如: 两个字段的类型或大小不严格匹配,一个为tinyint,另一个为char:或一个为int(10)另一个为int(9)也是不行的,即使都为int(10),但一个是有符号数,一个是无符号数也会报错. reference的另一个表的字段必须是主键或建立索引. 外键的名字有重复或与键值重复. 两个表必须都是用InnoDB引擎,事实上MyISAM引擎是不会产生外键的. 设置了ON DELETE SET NULL,但字段又设置为NOT NULL. 在这个关系里面,…