看看这个查询:
insert into `admin_config`(name)
values ('cached_branch_products_2')
on duplicate key update value = 1
有两种可能发生。 insert
或update
。当insert
触发(执行)时,会将新行添加到表中,并且自然会增加AUTO_INCREMENT
。好的,一切都很好。
但是当update
触发(执行)时,AUTO_INCREMENT
也会被增加。为什么?而我该如何避免呢?
答案 0 :(得分:1)
不用担心。不保证自动增量列是无间隙的。除了这种情况之外,您删除和事务回滚也会使它们混乱。在其他数据库中,并行化和优化也会导致差距。
基本上,请习惯它。这样的列的目的是为每一行提供唯一的整数id。不管有什么差距,这都行得通。这些ID确实会捕获插入顺序。
为此目的尝试创建无缝序列将非常昂贵,基本上需要为每个插入和删除锁定整个表。这可能会严重影响某些应用程序的性能。因此,即使结果不符合每个人的审美标准,也放宽了规则以提供真正需要的东西。