mysql Cannot add or update a child row: a foreign key constraint fails

今天在mysql中执行了一句追加一列属性

ALTER TABLE `share` ADD COLUMN `goods_id` INT(20) NOT NULL AFTER `userId`


然后为goods_id 增加外键约束 


ALTER TABLE  `share` ADD CONSTRAINT  `fk_9_2` FOREIGN KEY (  `goods_id` ) 
REFERENCES  `goods` (  `id` ) 
ON DELETE CASCADE ON UPDATE CASCADE


果不其然,上天还是不能给自己太多甜头吃,冷不丁给你来点困难


错误码: 1452

Cannot add or update a child row: a foreign key constraint fails (`1go`.`#sql-16ec_1f`, CONSTRAINT `fk_999` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)


Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000

Total Time     : 00:00:00:000


观察了表,发现表中存在了数据,而且 goods_id 列默认全部被赋值 0 


原因就很简单了,都为零都指向了table  `goods` 所以 外键指向了一个不存在的goods id=0 的goods字段,自然就插不进去,提示更新update a child row error 了。。


解决方法,很简单:


第一种


就是把0改成 goods表(副表)中已经存在的 一个child row 数据


如如果商品表(goods)存在 id = 1 的字段,那么你就可以把 0 改成 1


第二种:


not null字段影响了。

先删除掉not null 

再把 

》goods_id 

	0
    

改成

》goods_id 

(NULL)

最后再添加外键约束即可~~~


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值