mysql duplicate id_mysql 使用ON DUPLICATE KEY UPDATE 时导致的自增主键id无限增大问题

mysql 版本:5.7

python版本:3.7

问题描述:mysql表A中数据有几十条,设置了一个自增 1 的id作为主键,在程序运行一段时间后发现表中最后一条数据的id已经是几百万了

ed3302e1dc94a6a7e49171a475efc928.png

表中所有数据如下:

d4d1f7f005e33eda978dea411d39626b.png

可以看到最大的一条id已经是四百多万了,并且id是不连续的

操作表的sql语句为:

sql = "INSERT INTO table A(xx, xx, xx, xx) VALUES('{xx}', '{xx}', '{xx}', '{xx}') ON DUPLICATE KEY UPDATE xx = '{xx}', xx = '{xx}';".format(

xx=xx, xx=xx, xx=xx, xx=xx)

即在操作table A时,先判断UNI的值是否存在,不存在则insert,存在则update

排除了一系列代码逻辑和语法的问题后,发现MySQL在使用

ON DUPLICATE KEY UPDATE

时,不论是insert还是update都会导致自增id加1

当前id:

f7a1a42bd9fd3aef27d484aa269e1bd1.png

执行三条update语句后:

b4ea5c8323e8850f0768e1b43d2bcda9.png

id变为:

4baaab45480f4f1afe09ba2304a64f49.png

下次如果向table A中insert时,id会从6535134开始

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值