赞
踩
记录一次数据库备份还原过程中的问题,以便今后遇到该问题能迅速定位。
问题产生的背景
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。