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

Mysql 如何避免在更新重复密钥时自动递增?,mysql,sql,Mysql,Sql,看看这个查询: insert into `admin_config`(name) values ('cached_branch_products_2') on duplicate key update value = 1 有两种可能发生。插入或更新。当insert触发(执行)时,将向表中添加一个新行,并且AUTO_INCREMENT将自然增加。好的,一切都好 但是当更新触发(执行)时,自动增量也将增加。为什么?我怎样才能避免呢?别担心。不能保证自动增量列是无间隙的。除此之外,删除和事务回滚也会

看看这个查询:

insert into `admin_config`(name)
values ('cached_branch_products_2')
on duplicate key update value = 1
有两种可能发生。
插入
更新
。当
insert
触发(执行)时,将向表中添加一个新行,并且
AUTO_INCREMENT
将自然增加。好的,一切都好


但是当
更新
触发(执行)时,
自动增量
也将增加。为什么?我怎样才能避免呢?

别担心。不能保证自动增量列是无间隙的。除此之外,删除和事务回滚也会使它们失去顺序。在其他数据库中,并行化和优化也会导致缺口

基本上,只是习惯它。此类列的目的是为每一行提供唯一的整数id。不管有多大的差距,这都是可行的。这些ID不捕获插入顺序


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

AFAIK你不能。当
自动增量
增加时,这是一个问题吗?@Vatev嗯,不是,这不能被认为是一个问题。只是它在ID排序的集成上造成了一个缺口,这让我感觉很糟糕。看起来a也不是一个选项。在dbfiddle上测试。我想知道他们什么时候会将MERGE添加到MySql。100%同意。事务回滚也会留下间隙。担心它或试图阻止它是毫无意义的。