2015-07-18 26 views
0

將舊ID分配到表中添加的新行。 例如:從表中分配以前未分配的ID?

id | name 
1 | n1 
2 | n2 
3 | n3 
4 | n4 

所以,如果我使用id = 2刪除行,表看起來像

id | name 
1 | n1 
3 | n3 
4 | n4 

現在我添加其他行, 此行是有可能,ID = 2在mysql中分配。 我可以創建一個java程序,在該程序中查找表中的1到(最高ID分配)之間的所有缺少id,並將其中一個缺少的id添加到新行中。

是否有可能在mysql中完成。 這裏'id'是主鍵。

+2

不要這樣做。讓MySQL來處理自動增量,不要亂它。 –

+0

是的,這是可能的,但出於好奇:_why_你想重新分配順序主鍵值嗎? –

+0

@LuiggiMendoza你是對的,實際上我正在寫兩個表,通過它我使用java生成類似json結構的樹,所以我使用'id'的值作爲數組的索引(也是樹的節點)所以mysql可以處理非常大的值,直到主鍵18446744073709551615,但java不會處理它,我找到它的解決方案。但這個問題隨機出現在我的腦海裏,因爲我只想知道它是否可能。 –

回答

0

我真的不知道你爲什麼要這麼做。相反,您應該將主鍵設置爲autonumeric並使用與您的java類型相同的類型。

但這裏是一個解決方案SQL FIDDLE DEMO

SELECT @newID := MIN(E1.employeeID) + 1 
FROM Employee E1 
WHERE not exists (SELECT E2.employeeID 
        FROM Employee E2 
        WHERE E2.employeeID = E1.employeeID + 1 
       ); 

INSERT INTO Employee values (@newID, 'name ' + @newID); 

這一下每個ID是否存在ID + 1。如果ID + 1次犯規存在是免費使用

所以返回較小(ID + 1 )

-1

我不這麼認爲,當從SQL中刪除任何東西時,主鍵將刪除整個元組,如果刪除特定元組的屬性,它將保持爲null,而不是插入較低值。