问题:
在重复键上使用 INSERT ... 时对包含自动递增列(id)的表进行 UPDATE 语句,id 值当遇到重复的键时,似乎会奇怪地增加。在初始插入期间(没有重复键),id 会正常递增。但是,当触发 ON DUPLICATE KEY 子句并插入新行时,id 值会变得不一致。
答案:
此行为是 MySQL 故意的并有记录。当插入的行会导致唯一索引或主键中出现重复值时,MySQL 会执行旧行的更新,而不是插入新行。这意味着即使首先尝试 INSERT 语句,id 值在该阶段已经递增。
随后的更新不会递增 id 值,因为自动递增列不会由 UPDATE 语句更新。相反,原始(现已更新)行的 id 值将被保留。
解决方案:
为了保持自动增量没有间隙,有必要使用不同的方法。一种选择是计算输出的增量值,而不是依赖自动增量列。或者,可以使用涉及表锁和触发器的更复杂的方法来对行重新编号并确保 id 值中没有间隙。
以上是为什么 MySQL 的 AUTO_INCRMENT 行为与 INSERT ... ON DUPLICATE KEY UPDATE 不一致?的详细内容。更多信息请关注PHP中文网其他相关文章!