SQLSTATE[23000]主键重复

在批量更新涉及w_table_1和w_table_2的数据库操作中,使用Yii框架遇到SQLSTATE[23000]主键重复错误。问题源于测试数据还原不完整,导致w_table_2插入时主键冲突。解决方案包括:确保测试数据的全面还原,以及调整数据以避免联合主键冲突。
摘要由CSDN通过智能技术生成
1、表操作简介
批量更新的时候需要对w_table_1和w_table_2两个表做写操作,所以,在代码中使用事务操作,对这两个表做一致性处理。
因为使用事务做一致性处理,所以,在实行事务之前,认为这两个表的数据是一致的。

2、一致性校验条件
需要对于w_table_1表和w_table_2表的某些属性值作为参照,用于数据一致性校验的条件。
w_table_1表:更新的数据条目。(需要对w_table_1表的相应的car_id数据的inspection_status字段更新)在在yii框架中,只用AR的updateall方法更新数据库的时候,返回更新成功的条目数,就选用更新条目数作为一致性判断的条件。

w_table_2表:将相应的car的年检信息插入该表的数量。(由于事务的一致性保证,默认情况下,在w_table_1表获得更新的car_id的完整的年检数据在w_table_2表是没有记录的)

3、数据更新保存失败描述

发现对同一组car_id进行批量安排年检总是失败,而且失败的car_id是一定的

4、原因阐述
由于我们使用事务保证数据一致性,所以默认w_table_1表和w_table_2表的数据是一致的。也就是说w_table_1表更新的数据条目数和w_table_2表新插入的数据数量是相等的。

但是,测试的过程中,测试人员在生成需要的数据时候只是对w_table_1表的数据进行还原,没有将w_car_inspection表的相应数据删除,所以,导致在插入w_table_2表的时候出现CDbCommand failed to execute the S
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值