我将id的各种活动连续存储为1,2,3,4。
如果我删除了第二条记录(id 2),我如何更新以便3变为2而4变为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性能,这可能是一个不错的选择。这种方法的缺点是查询表更难。