具有 AUTO_INCREMENT primary id 的 MySQL 表在回滚后不释放数字

标签 mysql transactions auto-increment

我有一张有账单的 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/

相关文章:

mysql - 使用 Sequelize 和 MySQL 方言生成模型

php - 使用 SELECT 查询从两个表获取结果

SQL 服务器 : how transactions work

python - django:从 IntegrityError 中恢复的正确方法

c# - 具有多个查询的事务

mysql - 删除后数据库内存浪费

MySQL 优化 select count distinct group by

javascript - 在 jQuery DataTables 1.10.2 中按 DD/MM/YYYY 对日期列进行排序

php - 我正在尝试从 MySQL 查询生成一个 HTML 表。这是我试图从 MySQL 查询 : 生成的表的格式

javascript - 为什么我用xmlhttprequest抓取数据时,主键跳动很大?