2017-07-28 53 views
0

我有一個50行的表,id列作爲主鍵,自動增量。如何自動設置新的id值作爲已刪除行的ID

開頭id值從1 - 50;

刪除一行後,例如id=1,並插入一個新行,這將有id=51

如何設置新行取第一個空位,這種情況自動爲id=1,而不是51;

此外,如果id=5被刪除,下一個插入的行應該有id=5等。

+5

這是沒用的。 –

+1

@u_mulder,這對我有用 – bonaca

+1

不要刪除數據庫中的行只是用新的用戶值更新 –

回答

1

您可以使用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

2

有了自動增量列,您無法更改每行的檢查項。
您可以禁用鍵檢查並截斷表格,這將重新分配每個行的新鍵(數字),但這意味着先前的鍵將移動到其他行,具體取決於刪除的行數以及它們在序列中的位置。

如果您確實需要做類似於您正在做的事情,您可以通過腳本創建一個仿索引的「自動」增量列。然後,您將能夠以您選擇的任何方式管理該列。