何時實際插入數據庫?當「INSERT」語句完成時嗎?或者當「INSERT」語句後「COMMIT」語句完成時?何時實際插入數據庫?
回答
比你想的晚。這裏的原則一般適用。
事務日誌的要點是確保ACID在發生電源故障時正常工作,就像INSERT完成一樣。 INSERT將作爲恢復階段的一部分向前滾動或回滾(在大多數RDBMS中)
因此,確認事務日誌條目存儲在介質上更爲重要。 然後 INSERT可以提交。
包含已更改行的數據頁將最終在磁盤上最終(檢查點等),但不一定在成功提交的位置。
但是,數據頁面在內存中並可供使用。
注意,一個INSERT可能導致頁面拆分,索引進行更新,引發火災等所以我說的話得到了簡化。
而當數據在磁盤上結束不要緊的一種方式或其他:只要我能得到的數據,它是安全的,比方說,停電情況下
一個老,但仍相關的SQL Server:SQL Server 2000 I/O Basics
什麼,我總結爲Write Ahead Logging
如果您在事務內部運行,那麼在事務提交時。否則,立即。
同意,儘管取決於隔離級別,數據可以在事務提交之前可見 - http://en.wikipedia.org/wiki/Isolation_level – dsolimano 2011-05-02 01:42:46
好的。我在這裏使用IBM DB2。有沒有辦法找到這個? – ericbae 2011-05-02 01:53:09
這裏是搞清楚了這一點鏈接:http://www-01.ibm.com/support/docview.wss?uid=swg21190874 – IAmTimCorey 2011-05-02 02:39:48
取決於數據庫/表的實現。它可能可能只是當事務日誌被集成時 - 直到哪一次該行只被插入到事務日誌中,並在內存中。
- 1. 插入記錄SQLite數據庫沒有實際插入
- 2. psycopg2不是實際插入數據
- 3. 每次有實時插入數據庫
- 4. 當變量存儲實際值時,PHP將NULL插入到MySQL數據庫中
- 5. INSERT查詢顯示插入的數據,但實際上沒有插入數據
- 6. 如何推遲我的CMP2.1 bean在JBoss 5.1中的實際數據庫插入?
- 7. errro將數據插入數據庫時
- 8. 接受數據庫寫入速度比數據庫實際寫入更快
- 9. 數據倉庫的實際實現
- 10. 如何讓PHP腳本實時響應數據庫插入?
- 11. 如何從現有數據庫實際構建數據倉庫?
- 12. 實際插入的行ID
- 13. 向MySQL插入實際的小時數(不是時間)
- 14. 是否當運行測試用例時,jUnit測試用例實際上在數據庫中插入數據
- 15. 插入數據時的錯誤數據庫的數據庫,
- 16. 插入小時數mysql數據庫
- 17. 數據庫插入
- 18. 插入數據庫
- 19. 插入數據庫
- 20. 數據庫插入
- 21. 插入數據庫
- 22. PHP bind_param錯誤:在數據庫中插入問號('?')而不是實際值
- 23. 如何將數據插入數據庫?
- 24. 根據實際時間或實際時間在數據庫中查找時間(包括延遲)
- 25. 顯示實際數據庫連接
- 26. 數據庫訪談/實際問題?
- 27. 如何顯示來自數據庫的實際數據
- 28. 插入時實體框架數據庫默認允許更新
- 29. SQL - 在數據庫表中插入實時
- 30. 向數據庫插入值時出錯
據我瞭解,直到它被驗證,而不是等待的任何其他功能的產品的一行被放入一個臨時表/觸發器等。一旦COMMIT被調用,它實際上被寫入表中。 – Zach 2011-05-02 01:40:42