mybatis 报错 Cannot add or update a child row: a foreign key constraint fails

在使用mybatis+springboot完成添加购物车的操作时,往往需要将用户表user表里的user_account字段作为购物车表cart_list里的一个外键,在进行外键关联的时候可能会发生 Cannot add or update a child row: a foreign key constraint fails的错误,即无法添加或更新子行,因为外键约束失败,这说明我们在数据库表进行添加外键的时候可能出了错误,而出现错误的原因大致分为以下几种

1.外键关联的字段不是主键,或者是外键关联的字段不具有唯一性

它的意思就是外键关联的字段里有重复的数值,不具备唯一性,导致映射出错

举个例子:比如一个订单表和一个产品表,订单表中有一个字段是产品ID,用来关联对应的产品信息,如果订单表中的产品ID存在重复的情况,即同一个产品ID对应多个订单记录,这样就会导致映射出错,因为数据库无法确定具体应该关联哪一个产品信息。

订单表(Order):

| 订单ID | 产品ID | 金额 |
| ---- | ---- | ---- |
| 1 | 101 | 100 |
| 2 | 102 | 150 |
| 3 | 101 | 120 |

产品表(Product):

| 产品ID | 产品名称 | 价格 |
| ---- | ---- | ---- |
| 101 | 商品A | 50 |
| 102 | 商品B | 80 |

在订单表中,订单ID为1和3的订单对应的产品ID都是101,这里就存在产品ID重复的情况。这会导致数据库无法准确地将订单与对应的产品信息进行关联,从而导致映射出错的情况发生,所以应确保外键关联字段(产品ID)具有唯一性,简而言之就是不让引用的字段值重复。

2.外键和对应表的主键的值不匹配

它的意思是就是在子表引用一个外键的时候,外键值在父表中不存在

比如在cart_list表中使用user_account作为外键时,user_account的值必须在user表中存在,如果子表中外键的值不存在于父表,那也可能发生此错误

3.外键的数据类型与父表中的不一致

它的意思就是在定义表结构和外键类型时,两表中的字段的结构和数据类型可能不一致

例如在给cart_list表设置外键user_account的时候,要保持字段类型都是int,字段名相同,是否为null也要保持一致!!!同样引擎和字符集也要保持一致

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值