如果我知道錯誤,請糾正我。當我們命令更新一行時,數據庫會執行刪除和刪除操作。誰能告訴我爲什麼或建議我閱讀一篇文章?爲什麼數據庫在刪除和插入時更新行?
回答
一些數據庫將使用刪除和插入來實現更新,並且將有一個日誌結構的文件系統,因此對行的更新會將舊的刪除行留在其原始位置,並在某處寫入該行的新副本其他。
查看http://blog.notdot.net/2009/12/Damn-Cool-Algorithms-Log-structured-storage討論日誌結構文件系統的一般用途和數據庫。
在什麼系統使用這個條款,上述參考文獻提及:
跟我唱它的讚美詩那麼大聲,你可能想知道什麼 系統已經使用這種算法。有令人驚訝的少數 我所知道的,但這裏有一些顯着的:
儘管最初的Berkeley DB的使用相當標準的架構,Java移植,BDB-JE使用所有的組件,我們剛剛描述。
CouchDB使用剛纔描述的系統,除了不是將日誌分成段和垃圾收集它們,而是在有足夠陳舊的數據積累時重寫它的整個數據庫。
PostgreSQL使用MVCC,它的writeahead日誌結構化,以允許我們描述的增量備份方法。
App Engine數據存儲基於Bigtable,它採用不同的磁盤存儲方法,但事務層 使用樂觀併發。有關使用日誌結構附加,而不是替代更新的優點
http://blogs.justonedatabase.com/tag/update-in-place/也舉行了會談。它提到:
當我們追加更新,而不是覆蓋數據,我們能夠保持 舊的和一致的版本的數據,而更新是在 進步,這提供了一個強大的恢復機制應該 更新失敗。我們可以輕鬆地爲更新添加水印,只有當我們知道更新已完成併成功保存在存儲中時,我們纔可以選擇僅移動該水印。鑑於 更新原地語義,我們必須在更新發生之前將舊版本 寫入並保留在單獨的日誌中,以便能夠保證從失敗的更新中恢復(假設從數據庫完全恢復 備份副本對於大多數 人來說有點過於簡單)。
大多數DBMS將嘗試在沒有刪除/插入的情況下進行更新。
但是由於物理存儲的原因,可能會有一些情況需要這種情況。您更新聚簇索引執行全表掃描,更新將更改表中該記錄的位置,例如,
update table set clusterindexcol = clusterindexcol + 10
當記錄移動到物理表內的不同位置時,它可能會第二次更新。
或者您正在更新多個行的主鍵列,檢查重複項的最簡單實現是delete/insert。
- 1. 數據庫操作選擇,更新,插入和刪除
- 2. TelerikRadGrid如何插入,更新和刪除到SQL數據庫
- 3. 從SQLite數據庫插入,更新和刪除(Android)
- 4. 插入/刪除行時更新表格
- 5. 燒瓶:在數據庫中插入,刪除和更新後發佈數據
- 6. 在mysql數據庫中插入更新和刪除複選框數據
- 7. 如何在從UITableView插入和刪除行時正確更新數據源?
- 8. 插入和更新,在DB中刪除
- 9. 插入,更新和刪除在vb.net
- 10. 如何刪除和爲什麼自動輸入數據庫?
- 11. mysql刪除然後插入。不爲AI表插入刪除行!爲什麼?
- 12. 使用vb.net從Sql數據庫插入,更新和刪除數據?
- 13. 刪除和更新數據庫c#
- 14. 簡單的數據庫視圖(更新,插入,刪除)
- 15. oracle數據庫中的日誌插入/更新/刪除
- 16. sqlite多個數據庫插入/更新/刪除
- 17. 如何將異常(插入,刪除和更新)引入到Oracle數據庫中?
- 18. 更新/插入/數據庫
- 19. 數據庫插入,更新和刪除應該包含在try/catch中嗎?
- 20. 在選擇,更新,插入和刪除操作期間鎖定數據庫
- 21. 爲什麼數據庫在重新安裝apk後被刪除?
- 22. GridControl刪除多個行和更新記錄在數據庫
- 23. JPA不插入數據庫,爲什麼?
- 24. 添加更新,刪除,插入按鈕以運行jtable數據
- 25. SQL更新,刪除並同時插入
- 26. 更新/刪除/插入DataGridView
- 27. 什麼時候UITableView內容大小更新與行插入/刪除動畫
- 28. ORACLE和TRIGGERS(插入,更新,刪除)
- 29. MySql觸發更新,插入和刪除
- 30. 要插入,更新和刪除的SSIS
你介意解釋一下好嗎?用一些例子。 –
也許你指的是如何更新B-Tree索引? DBMS不能只是改變鍵值,而不能將它移動到索引結構中的不同位置。 –