MySQL 自动增量 - 删除记录后重新分配


mysql auto-increment - reassign after a record has been deleted

我正在使用auto-increment为数据库中的每个新条目分配一个id。另外,我有一个php脚本,它根据当前页码从该数据库中选择10个条目。例如,如果当前页为 2,则脚本应选择 id=20 和 id=29 之间的每个条目。

现在,如果我删除一个条目,id 就会丢失。因此,删除 id28 后,脚本将仅显示 9 个条目。

有没有办法在删除 e 记录后重新分配auto-increment值?

这通常被认为是可取的:如果删除条目编号 28,则再也不会有条目28。如果有人试图引用它,他们显然是在尝试引用已删除的那个,您可以报告错误。

如果您返回并将28重新分配给某个新条目,现在您不知道此人是指28还是记录。

让我们退后一步,重新审视你想做什么。您的目标不是在 2030 之间显示十个条目。您的目标是显示十个符合您条件的条目。为此,您可以使用内置LIMITOFFSET术语:

SELECT ...
FROM ...
WHERE ...
OFFSET 29
LIMIT 10

OFFSET告诉MySQL从哪里开始计数,LIMIT告诉它要计数多少。MySQL 会将整个结果集放在一起,然后从第 30 个开始为您提供 10 个条目。这是你的第四页结果。现在,他们碰巧拥有什么 ID 并不重要。

您应该更改为页面选择条目的方式。

通过使用限制..OFFSET 子句,您将能够选择 10 个条目,从第 N 个条目开始:

SELECT   *
FROM     table
ORDER BY id
LIMIT    10
OFFSET   19
  • LIMIT 10 表示仅返回 10 行
  • OFFSET 19 表示第 19 行之后的返回行

这样,如果某些 id 已被删除并且 id 不是连续的,则

无关紧要。

只需更改偏移量:

  • 第 1 页 => 偏移量 0
  • 第 2 页 => 偏移量 9
  • 第 3 页 => 偏移量 19
  • 第 N 页 => 偏移量 (N-1(*10-1

您的问题建议像

SELECT columns FROM table WHERE id BETWEEN 20 AND 29;

或不太优雅

SELECT columns FROM table WHERE id >= 20 AND id <= 29;

如果是这样,我建议您阅读限制条款并按照以下方式进行操作:

SELECT columns FROM table ORDER BY id LIMIT 20, 10;
你可以

,但你不应该。如果存在 id=29,您将自动增量重置为 28,那么当自动增量想要使用 id=29 但记录已经存在时会出现问题。

你最好写一个这样的查询:

select * from table order by ID LIMIT n,10;

其中 n 是页码*10

重新分配自动增量值 这是一种不好的做法,因为 id 可能会与其他表一起使用。使用偏移/极限构造,而忘记重新分配自动递增:)

作为问题 (auto_increment( 的直接答案,您可以使用以下查询更改其值:

ALTER TABLE `your_table` AUTO_INCREMENT = 200

下一个创建的项的下一个 AI 列值将设置为 200。这在某些情况下很有用,尽管我同意您最好使用 LIMIT 偏移量。