我有一张有账单的 table 。在我插入新记录后,每张账单都有一个来自数据库的 ID。该字段是一个设置了 AUTO_INCREMENT 的 INTEGER。
如果我在事务中插入一条新记录并且我必须回滚此事务,则 ID 将被取走并消失。因此下一条记录成为 ID 更高的一个,即使这个 ID 没有被使用。
如果帐单采用线性编号会更好,这样会计可以查明是否有问题。
最佳答案
出于并发原因,自动增量值无法“回滚”您的事务。如果另一个进程在您的事务处理过程中插入了记录,您以后可能会与他们的 ID 发生冲突。
例如,假设您在进程“A”中的事务获取 ID 1,2 和 3。另一个进程“B”运行并获取 ID 4 和 5。如果身份随您的事务和下一个进程回滚“C”需要 5 个 ID,它会得到 1、2、3、4、5,但进程“B”已经占用了 4 和 5。
关于具有 AUTO_INCREMENT primary id 的 MySQL 表在回滚后不释放数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4750652/