新增数据的时候报Integrity constraint violation

  • 报错信息, 该问题我已经解决, 但是不明白为什么会出现这种问题:
    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '6660' for key 'PRIMARY
  • mysql 版本: 5.7
  • 通过 show create table *** 看到问题所在:
    • 建表语句中的 auto_increment 的值为 6660, 但是该数据表中的目前 id 字段的最大值为 6695
    • 表中已经存在了 6660 这条记录, 所以在插入的时候报错了, 我手动修改了 auto_increment 的值之后就解决了

  • 所以有大哥们知道为啥会出现这种情况吗?
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

有没有可能是这张表涉及事务,事务回滚导致字增id已经生成。回滚后,这条记录删除。

3年前 评论
qingshui (楼主) 3年前

可能是在那个位置直接指定了主键的值作添加

3年前 评论
qingshui (楼主) 3年前

好像只有直接修改主键数值才会出现这种情况。

3年前 评论
qingshui (楼主) 3年前

另外,若是数据库存在主从关系,在主机器上进行了 REPLACE INTO 操作之后,从机器上对应表的AUTO_INCREMENT是不会更新的,导致从机器转为主机器时,新插入数据会出现异常,直到AUTO_INCREMENT增加到原来主机器的值为止。

刚看到别的帖子搜了搜,不过不推荐用 REPLACE INTO还有和这个差不多的 INSERT ON DUPLICATE KEY UPDATE ,产生死锁的几率较高。

3年前 评论
qingshui (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!