违反PRIMARY KEY约束'PK _ *%$ ^&'

时间:2014-01-14 12:19:58

标签: mysql sql-server

我有一个主键'ID'的表,每次进入新的条目(行)时自动递增。最大(ID)现在为18.现在我想在17和18之间插入一个新行,并且相应地重命名ID,如18变为19,新行必须为18,如下所示。我知道我会收到主键违规错误,是否有可能以其他方式执行此操作?

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

17---------OLD ROW-----------
18---------NEW ROW----------- 
19---------OLD ROW-----------

2 个答案:

答案 0 :(得分:0)

如评论中所述,id只是一个标识符。它的顺序(甚至价值,只要它是唯一的)并不重要。

如果你绝对必须这样做,你需要在插入之前更改第一列的id:

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

答案 1 :(得分:0)

虽然如果依靠自动生成的索引作为排序顺序,Alma Do说您的设计存在缺陷是正确的,那么您可以通过首先按降序递增值来解决唯一性约束(以便从未有过)两个具有相同值的记录):

UPDATE yourtable SET id = id+1 WHERE id >= 18
ORDER BY id DESC; -- here is the trick
相关问题