我使用auto-increment
为我的数据库中的每个新条目分配一个id。 另外,我有一个php脚本,根据当前页码从这个数据库中选择10个entrys。 例如,如果当前页面为2,则脚本应选择id = 20和id = 29之间的每个条目。mysql自动增量 - 记录删除后重新分配
现在,如果我删除一个条目,该ID将丢失。因此,当id28被删除时,脚本将只显示9个信息。
e记录被删除后,有没有办法重新分配auto-increment
的值?
我使用auto-increment
为我的数据库中的每个新条目分配一个id。 另外,我有一个php脚本,根据当前页码从这个数据库中选择10个entrys。 例如,如果当前页面为2,则脚本应选择id = 20和id = 29之间的每个条目。mysql自动增量 - 记录删除后重新分配
现在,如果我删除一个条目,该ID将丢失。因此,当id28被删除时,脚本将只显示9个信息。
e记录被删除后,有没有办法重新分配auto-increment
的值?
这通常被认为是可取的:如果条目编号28
被删除,也不会再像一个条目28
。如果有人曾经试图引用它,那么他们显然试图引用已被删除的那个,并且您可以报告错误。
如果你回去,并重新分配28
一些新的项目,现在你不知道的人是否意味着老28
或新纪录。
让我们退一步,重新审视您想要做的事情。您的目标不是显示20
和30
之间的10个条目。你的目标是显示10个符合你的标准的条目。对于这一点,你可以使用内置的LIMIT
和OFFSET
方面:
SELECT ...
FROM ...
WHERE ...
OFFSET 29
LIMIT 10
的OFFSET
告诉MySQL从哪里开始计数和LIMIT
告诉它如何不计其数。 MySQL将整个结果集放在一起,然后从第30个开始给你10个条目。这是你的第四页结果。现在它并不重要,它们碰巧拥有什么ID。
不可能有更清楚的,谢谢:) – Sprottenwels 2012-07-08 11:58:09
您应该改变选择页面条目的方式。
通过使用LIMIT .. OFFSET子句,你就可以选择10个条目,开始第N个条目:
SELECT *
FROM table
ORDER BY id
LIMIT 10
OFFSET 19
LIMIT 10
意味着回报只有10行OFFSET 19
意味着在第19行后返回行这样,它如果某个ID已被删除且ID不连续,则无关紧要。
只要改变OFFSET:
这应该是'LIMIT 0,10',因为这是一个基于零的偏移量? – rodneyrehm 2012-07-08 11:54:09
你说得对,固定 – arnaud576875 2012-07-08 11:55:27
你的问题建议像
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;
线做somethong
你可以,但你不应该。如果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偏移。
是不是有没有使用LIMIT子句中的“偏移量”的原因? 'LIMIT 0,10',next page'LIMIT 10,10',next page'LIMIT 20,10',... – rodneyrehm 2012-07-08 11:47:12
我从来没有听说过这个。我应该更好地研究了整个sql的东西: 非常感谢,这非常棒。 – Sprottenwels 2012-07-08 11:53:15