首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql自动增量-删除记录后重新分配

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

Stack Overflow用户
提问于 2012-07-08 19:44:39
回答 6查看 3.3K关注 0票数 1

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

现在,如果我删除一个条目,id就会丢失。因此,当id28被删除时,该脚本将只显示9个条目。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-07-08 19:51:13

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

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

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

代码语言:javascript
复制
SELECT ...
FROM ...
WHERE ...
OFFSET 29
LIMIT 10

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

票数 5
EN

Stack Overflow用户

发布于 2012-07-08 19:50:43

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

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

代码语言:javascript
复制
SELECT   *
FROM     table
ORDER BY id
LIMIT    10
OFFSET   19

  • LIMIT 10表示只返回10行,rows
  • OFFSET 19表示在第19行

之后返回行

这样,即使某些id已被删除并且id不是连续的,也无关紧要。

只需更改偏移量:

  • 第1页=>偏移0
  • 第2页=>偏移9
  • 第3页=>偏移19
  • 第N页=>偏移(N-1)*10-1
票数 3
EN

Stack Overflow用户

发布于 2012-07-08 19:51:42

您的问题建议使用如下查询

代码语言:javascript
复制
SELECT columns FROM table WHERE id BETWEEN 20 AND 29;

或者不那么优雅

代码语言:javascript
复制
SELECT columns FROM table WHERE id >= 20 AND id <= 29;

如果是这样的话,我建议您在LIMIT clause上阅读一下,并按照下面的思路做一些事情

代码语言:javascript
复制
SELECT columns FROM table ORDER BY id LIMIT 20, 10;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11382877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档