我有一個50行的表,id
列作爲主鍵,自動增量。如何自動設置新的id值作爲已刪除行的ID
開頭id
值從1 - 50;
刪除一行後,例如id=1
,並插入一個新行,這將有id=51
。
如何設置新行取第一個空位,這種情況自動爲id=1
,而不是51
;
此外,如果id=5
被刪除,下一個插入的行應該有id=5
等。
我有一個50行的表,id
列作爲主鍵,自動增量。如何自動設置新的id值作爲已刪除行的ID
開頭id
值從1 - 50;
刪除一行後,例如id=1
,並插入一個新行,這將有id=51
。
如何設置新行取第一個空位,這種情況自動爲id=1
,而不是51
;
此外,如果id=5
被刪除,下一個插入的行應該有id=5
等。
您可以使用MySQL的查詢變量跟蹤以前的ID和查詢計算差值,E,G:
SELECT id, id - @previous AS difference, @previous := id
FROM test, (SELECT @previous := 0) a
ORDER BY id;
這會給你所有差異的ID。然後,您可以用差> 1這個包裝成另一種查詢和SELECT
行獲取可用的ID,例如:
SELECT (id - difference + 1) AS available_id
FROM (
SELECT id, id - @previous AS difference, @previous := id
FROM test, (SELECT @previous := 0) a
ORDER BY id) b
WHERE b.difference > 1
LIMIT 1;
這裏的SQL Fiddle。
有了自動增量列,您無法更改每行的檢查項。
您可以禁用鍵檢查並截斷表格,這將重新分配每個行的新鍵(數字),但這意味着先前的鍵將移動到其他行,具體取決於刪除的行數以及它們在序列中的位置。
如果您確實需要做類似於您正在做的事情,您可以通過腳本創建一個仿索引的「自動」增量列。然後,您將能夠以您選擇的任何方式管理該列。
這是沒用的。 –
@u_mulder,這對我有用 – bonaca
不要刪除數據庫中的行只是用新的用戶值更新 –