【问题标题】:MySQL table with AUTO_INCREMENT primary id does not release the number after a rollback具有 AUTO_INCREMENT 主 ID 的 MySQL 表在回滚后不释放数字
【发布时间】:2011-06-12 15:32:13
【问题描述】:
我有一张放账单的桌子。在我插入新记录后,每张账单都有一个来自数据库的 id。该字段是一个设置了 AUTO_INCREMENT 的 INTEGER。
如果我将新记录作为事务的一部分插入并且我必须回滚该事务,则 ID 会被占用并消失。因此,下一条记录的 ID 会变高,即使该 ID 没有被使用。
账单最好有一个线性编号,这样会计可以找出是否有问题。
【问题讨论】:
标签:
mysql
transactions
auto-increment
【解决方案1】:
出于并发原因,自动增量值不能随您的事务“回滚”。如果在您的事务处理过程中另一个进程插入了记录,那么您以后可能会与他们的 ID 发生冲突。
例如,假设您在进程“A”中的事务获取 ID 1,2 和 3。另一个进程“B”运行并获取 ID 4 和 5。如果身份随着您的事务和下一个进程回滚“ C" 需要 5 个 ID,它会得到 1,2,3,4,5 但 4 和 5 已经被进程 "B" 占用了。