在这种情况下如何更新记录?

时间:2011-04-26 10:08:24

标签: sql sql-server oracle sql-server-2005 tsql

我将id的各种活动连续存储为1,2,3,4。

如果我删除了第二条记录(id 2),我如何更新以便3变为2而4变为3?

提前致谢

3 个答案:

答案 0 :(得分:1)

update table set col1 = col1-1 where col1>2

答案 1 :(得分:1)

答案1.你不想。 id字段的整个目的是它是不可变的。

答案2.你不想。如果需要,id字段根本不是id字段,而是数据字段。

答案3.删除记录并使用新号码再次插入记录。 你可以看到,如果行数很大,这会非常昂贵。

答案 2 :(得分:1)

如何使用linked list方法,每个活动指向下一个?

select * from activity;
+----+---------+
| id | next_id |
+----+---------+
|  1 |       2 |
|  2 |       3 |
|  3 |       4 |
|  4 |       5 |
|  5 |    NULL |
+----+---------+

如果要删除ID = 2的活动,则需要将指向ID = 2的行更新为先前指向的ID = 2的行。

update activity
   set next_id = 3
 where id = 1;

delete
  from activity 
 where id = 2;

+----+---------+
| id | next_id |
+----+---------+
|  1 |       3 |
|  3 |       4 |
|  4 |       5 |
|  5 |    NULL |
+----+---------+

如果您有很长的列表且担心DML性能,这可能是一个不错的选择。这种方法的缺点是查询表更难。

相关问题