2011-05-02 50 views
4

何時實際插入數據庫?當「INSERT」語句完成時嗎?或者當「INSERT」語句後「COMMIT」語句完成時?何時實際插入數據庫?

+0

據我瞭解,直到它被驗證,而不是等待的任何其他功能的產品的一行被放入一個臨時表/觸發器等。一旦COMMIT被調用,它實際上被寫入表中。 – Zach 2011-05-02 01:40:42

回答

3

比你想的晚。這裏的原則一般適用。

事務日誌的要點是確保ACID在發生電源故障時正常工作,就像INSERT完成一樣。 INSERT將作爲恢復階段的一部分向前滾動或回滾(在大多數RDBMS中)

因此,確認事務日誌條目存儲在介質上更爲重要。 然後 INSERT可以提交。

包含已更改行的數據頁將最終在磁盤上最終(檢查點等),但不一定在成功提交的位置。

但是,數據頁面在內存中並可供使用。

注意,一個INSERT可能導致頁面拆分,索引進行更新,引發火災等所以我說的話得到了簡化。

而當數據在磁盤上結束不要緊的一種方式或其他:只要我能得到的數據,它是安全的,比方說,停電情況下

一個老,但仍相關的SQL Server:SQL Server 2000 I/O Basics

什麼,我總結爲Write Ahead Logging

3

如果您在事務內部運行,那麼在事務提交時。否則,立即。

+1

同意,儘管取決於隔離級別,數據可以在事務提交之前可見 - http://en.wikipedia.org/wiki/Isolation_level – dsolimano 2011-05-02 01:42:46

+0

好的。我在這裏使用IBM DB2。有沒有辦法找到這個? – ericbae 2011-05-02 01:53:09

+0

這裏是搞清楚了這一點鏈接:http://www-01.ibm.com/support/docview.wss?uid=swg21190874 – IAmTimCorey 2011-05-02 02:39:48

0

取決於數據庫/表的實現。它可能可能只是當事務日誌被集成時 - 直到哪一次該行只被插入到事務日誌中,並在內存中。