2014-01-14 139 views
0

我有一個主鍵'ID'的表,每次新條目(行)進來時自動遞增。最大(ID)現在是18。我想在17和18之間插入一個新行,並且相應地重命名這些ID,如18變爲19,新行必須如下18。我知道我會得到一個主鍵違規錯誤,是否有可能以任何其他方式做到這一點?

ID---------COLUMNS----------- 

17---------OLD ROW----------- 
18---------NEW ROW----------- 
19---------OLD ROW----------- 
+6

不,您不想要要做到這一點。主鍵與行順序無關。因此,如果您確實需要連續添加相應的列,但將主鍵例程保留爲DBMS –

+0

在關係數據庫中,行沒有順序,因此不會在兩個其他行之間插入一行。僅在使用ORDER BY子句查詢數據時才應用排序。如果您需要在數據中包含一些排序,那麼您需要添加另一個列,您可以隨意填寫。 –

回答

0

正如註釋中所提到的,id只是一個標識符。它的順序(甚至值,只要它是唯一的)並不重要。

如果你絕對必須做到這一點,你需要在插入前更改第一列的ID:

UPDATE table SET ID = 19 WHERE ID = 18; 
INSERT INTO table (id,foo) VALUES (18,'foo'); 
0

雖然阿爾瑪做的是正確地說,你的設計是有缺陷的,如果你依賴於一個汽車生成的索引作爲排序順序,您可以通過首先按降序遞增值(以便從未有兩個具有相同值的記錄)來解決唯一性約束:

UPDATE yourtable SET id = id+1 WHERE id >= 18 
ORDER BY id DESC; -- here is the trick 
相關問題