如何避免重复密钥更新时自动递增?

时间:2019-01-22 10:37:37

标签: mysql sql

看看这个查询:

insert into `admin_config`(name)
values ('cached_branch_products_2')
on duplicate key update value = 1

有两种可能发生。 insertupdate。当insert触发(执行)时,会将新行添加到表中,并且自然会增加AUTO_INCREMENT。好的,一切都很好。

但是当update触发(执行)时,AUTO_INCREMENT也会被增加。为什么?而我该如何避免呢?

1 个答案:

答案 0 :(得分:1)

不用担心。不保证自动增量列是无间隙的。除了这种情况之外,您删除和事务回滚也会使它们混乱。在其他数据库中,并行化和优化也会导致差距。

基本上,请习惯它。这样的列的目的是为每一行提供唯一的整数id。不管有什么差距,这都行得通。这些ID确实会捕获插入顺序。

为此目的尝试创建无缝序列将非常昂贵,基本上需要为每个插入和删除锁定整个表。这可能会严重影响某些应用程序的性能。因此,即使结果不符合每个人的审美标准,也放宽了规则以提供真正需要的东西。