回答
update table set col1 = col1-1 where col1>2
如果操作系統在SQL Server中使用實際的「身份」列,這將不起作用,因爲它們不可更新。 – 2011-04-26 10:12:46
@Martin - yups那是真的,你不能改變 – 2011-04-26 10:14:17
什麼是OP?在這裏請讓我知道 – 2011-04-26 10:44:34
答案1.你不想。 id字段的全部目的是不變的。
答案2.你不想。如果你需要這樣做,id字段根本不是一個id字段,而是一個數據字段。
回答3.刪除記錄,並重新插入新的數字。 你可以看到,如果行數很大,這會變得非常昂貴。
在很多情況下,如果您刪除並重新插入,刪除的ID將不會被重複使用,而是將使用序列中新的未使用的ID – dplante 2012-05-24 03:35:38
使用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性能,這可能是一個不錯的選擇。這種方法的缺點是查詢表格更困難。
+1但是,這不會更好地描述爲[單鏈表]( http://en.wikipedia.org/wiki/Singly_linked_list)? – onedaywhen 2011-04-27 09:09:33
@oneday,是的,我更新了答案以使用正確的術語。 – Ronnis 2011-04-27 19:45:14
- 1. 在這種情況下如何記錄日誌
- 2. 如何在不更改rowversion的情況下更新記錄
- 3. 如何在這種情況下更新我的行?
- 4. 如何在這種情況下
- 5. 如何使用在這種情況下
- 6. 如何在這種情況下
- 7. 如何在這種情況下
- 8. 如何在這種情況下(MySQL的)
- 9. 如何點擊在這種情況下
- 10. 如何在這種情況下
- 11. 如何調用在這種情況下
- 12. 如何在這種情況下循環
- 13. LinqtoSQL/C#:如何在這種情況下
- 14. 如何在這種情況下
- 15. 如何在不加載orm的情況下更新記錄?
- 16. 是在這種情況下
- 17. 在這種情況下
- 18. 和|| =在這種情況下
- 19. 在這種情況下
- 20. 在這種情況下
- 21. 在這種情況下
- 22. 我如何處理這種情況在mysql中搜索記錄?
- 23. 在這種情況下如何釋放記憶?
- 24. HTML5部分 - 如何在這種情況下標記和樣式?
- 25. 如何在這種情況下釋放記憶?
- 26. 如何糾正這種情況下еxpression
- 27. 如何避免這種情況下
- 28. ProgressBar properychangeListener在這種情況下不更新
- 29. Knockoutjs在這種情況下不更新UI
- 30. 在這種情況下如何獲取最新的對象?
爲什麼你需要這樣做?如果有差距,應該沒有關係。如果您需要從ID中派生連續的數字序列,則Oracle和SQL Server都支持「ROW_NUMBER」。 – 2011-04-26 10:09:04
問題不是如何,而是爲什麼?你想通過保證表中連續的數字STORED和MAINTAINED來完成什麼? – tbone 2011-04-26 11:29:43
* frds * ...是* fjords *的縮寫嗎? – 2011-04-27 04:53:04