我明白当使用INSERT ... ON DUPLICATE KEY UPDATE
在 MySQL 中,当插入失败时,会出现自动增量间隙。然而,我注意到,只有在违反唯一键约束时才会出现间隙。如果主键约束失败,则不会出现自增间隙。
两者差异的原因是什么?
Thanks!
如果自动增量字段是主键,则只有在插入语句中显式将自动增量字段的值设置为该字段中已存在的值时,才会发生主键重复(我不知道为什么要这样做) 。
作为 mysql 文档使用自动增量 https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html says:
当您将任何其他值插入 AUTO_INCREMENT 列时,该列将设置为该值,并且顺序将重置,以便下一个自动生成的值从最大的列值开始按顺序排列。
关键是,在这种情况下,mysql 不会尝试为自动增量列生成值,而是会使用插入中指定的值。此外,序列也会重置为字段中的最大值,因此下一次插入不会有任何间隙。
但是,如果在尝试插入时另一个唯一索引约束失败,则 mysql 已经生成了自动增量字段的值,因此在自动增量序列中会创建一个间隙。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)