我使用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