MySQL-使用自增ID无法插入ID为0值的记录的问题分析

在数据库备份还原过程中,如果表的主键是自增ID,手动将某记录ID改为0会导致数据错乱。MySQL在默认模式下,插入0或NULL时会生成新的自增值。解决方法是在my.ini或my.cnf中设置sql_mode包含NO_AUTO_VALUE_ON_ZERO,重启数据库。了解这个问题的原因和解决方案,能有效避免类似数据偏差。
摘要由CSDN通过智能技术生成

记录一次数据库备份还原过程中的问题,以便今后遇到该问题能迅速定位。

问题产生的背景
1、数据库中表使用的是自增ID
2、在项目开发过程中数据库分为开发库和生产库,由于业务逻辑的需要,在生产库中把其中一个表的一条记录的ID手动改成了0。
3、备份生产库导入开发库过程中

问题
1、项目运行后,发现数据出现了严重的偏差,一些关联查询的数据不对,一开始以为是备份数据库或者导入数据库过程中出现了问题,来来回回折腾了几次,问题依旧。
2、追寻出问题的数据,查询数据库,发现ID手动改为0的那条记录被插入到最后一条记录,当然ID也不是0了。查看备份的源文件,生成的insert语句中这条记录的ID确实是0。难道产生了幻觉。

原因分析
1、因为在数据库表中ID采用了自增ID策略。默认情况下当ID是0或者null的时候,数据库会自动产生一个新的自增序列作为这条记录的ID。这就是我们插入0值ID记录时与期望不符原因。

看一下官方解释以及解决方案
1、最权威的还是官网解释
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_no_auto_value_on_zero

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值