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

Php mysql自动增量-删除记录后重新分配,php,sql,auto-increment,Php,Sql,Auto Increment,我正在使用auto increment为数据库中的每个新条目分配一个id。 另外,我还有一个php脚本,它根据当前的页码从这个数据库中选择10个条目。 例如,如果当前页面为2,脚本应选择id=20和id=29之间的每个条目 现在,如果我删除一个条目,id就会丢失。因此,当id28被删除时,脚本将只显示9个条目 删除e记录后,是否有方法重新分配自动增量值?您应该更改为页面选择条目的方式 通过使用限制。。OFFSET子句中,您将能够从第n个条目开始选择10个条目: SELECT * FROM

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

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


删除e记录后,是否有方法重新分配自动增量值?

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

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

SELECT   *
FROM     table
ORDER BY id
LIMIT    10
OFFSET   19
限制10意味着只返回10行 偏移量19表示第19行之后的返回行 这样,如果某些id已被删除,并且id不是连续的,则无关紧要

只需更改偏移量:

第1页=>偏移量0 第2页=>偏移量9 第3页=>偏移量19 第N页=>偏移量N-1*10-1
您应该更改为页面选择条目的方式

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

SELECT   *
FROM     table
ORDER BY id
LIMIT    10
OFFSET   19
限制10意味着只返回10行 偏移量19表示第19行之后的返回行 这样,如果某些id已被删除,并且id不是连续的,则无关紧要

只需更改偏移量:

第1页=>偏移量0 第2页=>偏移量9 第3页=>偏移量19 第N页=>偏移量N-1*10-1
这通常被认为是可取的:如果条目编号28被删除,则再也不会有条目28。如果有人试图引用它,他们显然是试图引用已删除的,您可以报告错误

如果你回去重新分配28到某个新条目,现在你不知道这个人是指旧的28还是新的记录

让我们后退一步,重新审视你想做的事情。您的目标不是显示20到30之间的10个条目。您的目标是显示十个符合您标准的条目。为此,可以使用内置的限制和偏移术语:


偏移量告诉MySQL从哪里开始计数,限制告诉MySQL要计数多少。MySQL将把整个结果集放在一起,然后从第30个开始给你10个条目。这是你的第四页结果。现在他们碰巧拥有什么ID无关紧要。

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

如果你回去重新分配28到某个新条目,现在你不知道这个人是指旧的28还是新的记录

让我们后退一步,重新审视你想做的事情。您的目标不是显示20到30之间的10个条目。您的目标是显示十个符合您标准的条目。为此,可以使用内置的限制和偏移术语:


偏移量告诉MySQL从哪里开始计数,限制告诉MySQL要计数多少。MySQL将把整个结果集放在一起,然后从第30个开始给你10个条目。这是你的第四页结果。现在他们碰巧拥有什么ID已经无关紧要了。

您的问题提出了如下查询

SELECT columns FROM table WHERE id BETWEEN 20 AND 29;
还是不那么优雅

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

你的问题提出了一个类似这样的问题

SELECT columns FROM table WHERE id BETWEEN 20 AND 29;
还是不那么优雅

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

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

您最好编写这样的查询:

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

其中n是页码*10

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

您最好编写这样的查询:

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

其中n是页码*10

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

重新分配自动增量值这是一种不好的做法,因为id,可以与其他表一起使用。使用偏移量/限制结构,忘记重新指定自动增量:

作为对问题自动增量的直接回答,您可以通过以下查询更改其值:

ALTER TABLE `your_table` AUTO_INCREMENT = 200

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

作为问题自动增量的直接答案,您可以通过以下查询更改其值:

ALTER TABLE `your_table` AUTO_INCREMENT = 200

下一个创建的项将其下一个AI COLLMN值设置为200。这在某些情况下是有用的,尽管我同意您最好使用限制补偿。

您不使用限制条款的补偿有什么原因吗?限制0,10,下一个
页数限制10,10,下一页限制20,10,…我以前从没听说过这个。我想你应该更好地研究整个sql语句:哦,非常感谢,这很好。你不使用限制子句的偏移量有什么原因吗?限制0,10,下一页限制10,10,下一页限制20,10,…我以前从没听说过这个。我想应该更好地研究整个sql问题:非常感谢,这很好。这应该是限制0,10,因为这是基于零的偏移量?这应该是限制0,10,因为这是基于零的偏移量?