本文共 631 字,大约阅读时间需要 2 分钟。
小A正在编写代码时,DBA小B指出用户特定信息表T的主键自增id已经达到16亿,担心未来插入操作会失败。小A发现实际数据却只有1100万,怀疑自增id的处理方式。
小A排查代码后发现没有直接删除或插入操作,于是怀疑DBA或其他原因。进一步观察发现,自增id每天递增,且递增幅度不一。小B提到是否使用了REPLACE INTO,但小A否认。小B建议检查binlog日志,结果未发现问题,但自增id确实存在跳跃。
REPLACE INTO会删除现有记录并插入新数据,导致自增id递增。小A确认未使用该语句,但自增id跳跃仍存在。
该语句不会改变主键,但返回的行数为2,表示插入一行,更新另一行。官方解释插入成功返回1,更新成功返回2。默认innodb_autoinc_lock_mode=1下,自增id会加1,导致跳跃。
在默认模式下,自增id会加1,导致跳跃。修改模式为0时,插入时锁表确保自增id准确,避免跳跃。
官方文档说明插入成功返回1,更新成功返回2。小A理解为插入1行,更新1行,总返回2行。
修改业务逻辑:拆分操作,先查询再更新,避免自增id跳跃,但增加复杂性。
删除自增主键:改用唯一索引,简化处理,但可能影响效率。
小A通过深入研究发现问题根源,强调保持好奇心和敏感对技术发展的重要性。
转载地址:http://sodfk.baihongyu.com/