gpt4 book ai didi

mysql - 自动递增主要在计数中留下间隙

转载 作者:可可西里 更新时间:2023-11-01 06:28:09 25 4
gpt4 key购买 nike

我有一个带有自动递增主键的表。该表旨在存储数百万条记录,我现在不需要删除任何内容。问题是,当插入新行时,由于某些错误,自动递增键在自动递增 ID 中留下了一些空隙。例如,在 5 之后,下一个 ID 是 8,留下 6 和 7 的空隙. 结果是当我计算行数时,结果是 28000,但是 max id 是 58000。这可能是什么原因?我没有删除任何东西。我该如何解决这个问题。

附言我在插入记录时使用插入忽略,这样当我尝试在唯一列中插入重复条目时它不会出错。

最佳答案

这是设计使然,并且会一直发生。

为什么?

让我们以 2 个正在执行 INSERT 的重叠事务为例

  • 事务 1 执行 INSERT,获取值(假设为 42),执行更多工作
  • 事务 2 执行 INSERT,获取值 43,执行更多工作

然后

  • 事务 1 失败。回滚。 42 保持未使用
  • 交易 2 以 43 完成

如果保证连续值,则每笔交易都必须一个接一个地发生。可扩展性不强。

另见 Do Inserted Records Always Receive Contiguous Identity Values (SQL Server 但同样的原则适用)

关于mysql - 自动递增主要在计数中留下间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16582704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com