万恶的MySql,今天创建个外键,提示无法创建,Err 1452
百度搜索到的答案:这是因为表设置了外键约束,而你试图插入一条外键字段所在表纪录不存在的一个值.就会报1452错.
比如a,b两表,a表外键id值来自b表的ID,当你在a表中插入一条纪录时,id字段用了不在b表id值范围内的值,就会报此错。
好吧,那开始检查主表字段是否有外键表中不存在的数据,我这里就两条数据,轻而易举就完成,答案是没有。一切的数据都是正常,这是一个非常奇怪的地方。
再次百度:
大致有以下原因:
1、外键的引用类型不一样,主键是int外键是char
2、找不到主表中 引用的列
3、主键和外键的字符编码不一致
4、还有要建立外键的话,要先建立索引。没有建立索引也会出错。
一一排查过滤,哥的表,哥的字段,哥的编码,一切都是非常非常正常的,这?!难道编程还要靠人品?!!!
一气之下,我决定相信关键字:MYSQL ERR 1452 的搜索结果,即上面列的原因2、找不到主表中 引用的列,虽然我这里的都能找到,看起来是这样的。好吧,删除主表所有的数据,再次执行,居然过了!!!我都有点怀疑之前是我眼花了,不过再次到程序中查看,因为之前查出来的数据在缓存中数据库的删除还没有影响到这里,NO,不是我眼花。这是什么原因呢?? 再次百度,google,都没有发现任何蛛丝马迹,好吧,暂且告一段落。
谨以此录,献给跟我一样人品不好的兄弟,也希望有一天,哪位大神不小心路过此地,一时兴起,给了俺答案。更希望有一天,我自己研究懂了在来更新此录MySQL建立外键约束失败 ERR 1452 - yoriin.重戚 - yoriin.重戚 的博客
语句如下
ALTER TABLE `om_assets`
ADD CONSTRAINT `FK_OM_ASSEST_ASSEST_TYPE_ID` FOREIGN KEY (`TYPE`) REFERENCES
`data_assets_type` (`ID`);
提示如下:
[Err] 1452 - Cannot add or update a child row: a foreign key constraint fails (`gzmanagers_om`.`#sql-4d0_140`, CONSTRAINT `FK_OM_ASSEST_ASSEST_TYPE_ID` FOREIGN KEY (`TYPE`) REFERENCES `data_assets_type` (`ID`))
--转自