我有一個主鍵'ID'的表,每次新條目(行)進來時自動遞增。最大(ID)現在是18。我想在17和18之間插入一個新行,並且相應地重命名這些ID,如18變爲19,新行必須如下18。我知道我會得到一個主鍵違規錯誤,是否有可能以任何其他方式做到這一點?
ID---------COLUMNS-----------
17---------OLD ROW-----------
18---------NEW ROW-----------
19---------OLD ROW-----------
我有一個主鍵'ID'的表,每次新條目(行)進來時自動遞增。最大(ID)現在是18。我想在17和18之間插入一個新行,並且相應地重命名這些ID,如18變爲19,新行必須如下18。我知道我會得到一個主鍵違規錯誤,是否有可能以任何其他方式做到這一點?
ID---------COLUMNS-----------
17---------OLD ROW-----------
18---------NEW ROW-----------
19---------OLD ROW-----------
正如註釋中所提到的,id只是一個標識符。它的順序(甚至值,只要它是唯一的)並不重要。
如果你絕對必須做到這一點,你需要在插入前更改第一列的ID:
UPDATE table SET ID = 19 WHERE ID = 18;
INSERT INTO table (id,foo) VALUES (18,'foo');
雖然阿爾瑪做的是正確地說,你的設計是有缺陷的,如果你依賴於一個汽車生成的索引作爲排序順序,您可以通過首先按降序遞增值(以便從未有兩個具有相同值的記錄)來解決唯一性約束:
UPDATE yourtable SET id = id+1 WHERE id >= 18
ORDER BY id DESC; -- here is the trick
不,您不想要要做到這一點。主鍵與行順序無關。因此,如果您確實需要連續添加相應的列,但將主鍵例程保留爲DBMS –
在關係數據庫中,行沒有順序,因此不會在兩個其他行之間插入一行。僅在使用ORDER BY子句查詢數據時才應用排序。如果您需要在數據中包含一些排序,那麼您需要添加另一個列,您可以隨意填寫。 –