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

时间:2012-07-08 11:44:39

标签: php sql auto-increment

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

现在,如果我删除一个条目,则ID将丢失。因此,当id28被删除时,脚本将仅显示9次委托。

删除电子记录后,有没有办法重新分配auto-increment值?

6 个答案:

答案 0 :(得分:5)

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

如果你回去并将28重新分配给某个新条目,那么现在你不知道这个人是否意味着 28 记录。

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

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

OFFSET告诉MySQL从哪里开始计数,LIMIT告诉它要计算多少。 MySQL将把整个结果集放在一起,然后从30日开始给你10个条目。那是你的第四页结果。现在它们碰巧有什么ID并不重要。

答案 1 :(得分:3)

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

通过使用LIMIT .. OFFSET子句,您可以从第N个条目开始选择10个条目:

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

这样,如果删除了一些id并且id不是连续的,那么无关紧要。

只需更改OFFSET:

  • Page 1 => OFFSET 0
  • Page 2 => OFFSET 9
  • Page 3 => OFFSET 19
  • Page N => OFFSET(N-1)* 10-1

答案 2 :(得分:1)

您的问题建议使用

之类的查询
SELECT columns FROM table WHERE id BETWEEN 20 AND 29;

或不那么优雅

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

如果是这样,我建议您阅读LIMIT clause并按照

的方式做一些事情。
SELECT columns FROM table ORDER BY id LIMIT 20, 10;

答案 3 :(得分:1)

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

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

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

其中n是页码* 10

答案 4 :(得分:1)

重新分配自动增量值这是不好的做法,因为id可能与其他表有关。使用偏移/限制构造,忘记重新分配自动增量:)

答案 5 :(得分:1)

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

ALTER TABLE `your_table` AUTO_INCREMENT = 200

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