2012-01-14 25 views
1

執行DELETE查詢時,從哪裏刪除數據?爲什麼數據在其他會話中仍然可見?在Oracle SQL中(在體系結構級別)觸發DELETE查詢時執行的後臺進程是什麼?在Oracle SQL中,爲什麼刪除(未提交)的行在當前會話中不可見,但在其他會話中可見?

+4

這就是事務的工作方式:http://en.wikipedia.org/wiki/Database_transaction,當然還有Orale參考:http://docs.oracle.com/cd/E11882_01/server.112/e25789/transact。 HTM – 2012-01-14 19:41:49

回答

3

除了對ziesemer提到你的ACID屬性的討論,你應該知道關於Multi-Version Concurrency Control或MVCC。如果你想知道'所有關於它',請考慮閱讀Philip A.Bernstein,Vassos Hadzilacos,Nathan Goodman的Concurrency Control and Recovery in Database Systems(可供下載)。

在Oracle和其他類似的MVCC DBMS中,當你啓動一個事務時,一個記錄保留一個時間戳,標識開始時間(但時間戳值不一定是簡單的'自從Unix Epoch'值以來的秒數)。在該事務正在運行時,在啓動時間後,它不會看到插入時間戳的任何數據。系統保持數據頁的先前版本可用於仍在運行的交易。當事務寫入一個頁面時,它會創建一個帶有新時間戳的新副本,但該副本在修改事務提交之前不會提供給其他事務,即使這樣,它也只能用於提交後啓動的事務。

3

您可能需要熟悉ACID - 特別是Isolation。如果您希望其他會話可見,請務必在刪除後進行提交。

由於上面鏈接的標準,數據在設計中仍然可以在其他會話中看到。

2

只要命令發出,該行就會被刪除,而不是其他會話,直到COMMIT

相關問題