MariaDB-ID列不一致?

时间:2018-08-23 22:23:36

标签: mariadb id

我在数据库中定义了一个自动递增列(ID)。 这是表中数据的图片: DB Data 这是数据库结构(标记字段是唯一的) enter image description here

您会看到ID不一致,为什么会这样呢?这是否意味着某些行以某种方式被删除?我尝试查看查询日志,但不幸地将其关闭。

2 个答案:

答案 0 :(得分:3)

id值之间有空隙是正常的。单独的差距并不表示有任何问题。

由于多种原因,“自动递增ID”可能会“丢失”:

  • 由于错误而导致插入失败
  • 成功插入,但事务已回滚
  • 删除行
  • 更新行
  • 插入一个高于当前自动增量的显式值

实际上,在INSERT失败的情况下丢弃自动递增值是一种{em>功能,其值为added in MySQL 5.1。它允许MySQL更快地生成自动增量值。如果多个客户端几乎同时插入,则一个客户端将首先生成一个ID,而另一个客户端必须等待第一个客户端成功完成其INSERT,然后才能知道是否将重用第一个客户端生成的ID,还是他们将使用下一个ID。这会导致所有INSERTing客户端排队等待一个客户端,然后再插入并提交。

但是,如果失败的INSERT只是丢弃一个id值,并且不需要“撤消”一个id的分配,那么许多客户端可以并发运行,而不必等待队列中的成功插入哪个id。

答案 1 :(得分:1)

ID仅必须是唯一的,而且,...有时以升序获取它们很方便,因此您可以隐式地知道记录创建的顺序。它们不必是连续的。

可能发生的事情是,某些进程考虑插入一条记录,然后回滚其操作,或者如您所说,某人稍后删除了这些行。

那不应该打扰你。他们仍然可以使用完美的ID(即,他们唯一地标识自己的记录)。