簡體   English   中英

SELECT的事務隔離級別

[英]Transaction isolation level for SELECTs

給定在關系數據庫上運行的事務,觸發一系列SELECTS。

我假設如果在此事務的中間,任何其他事務對數據庫提交一些UPDATE或INSERT,則此新數據對於前一事務中的其余剩余選擇是可見的。 這個假設是否正確?

我的意思是,我假設事務沒有被隔離用於讀取( 它總是讀取數據庫的最后狀態,即使它同時發生了變化 ),但僅針對着作,是嗎?

如果這取決於每個RDBMS的事務策略,那么Oracle的策略是什么?

您的假設是正確的,至少對於Oracle而言。

Oracle保證在給定時刻執行的讀取的一致性。 一旦啟動讀取,其他事務是否會更改所選數據並不重要 - Oracle保證數據是讀取開始時數據庫中的數據。 如果它無法兌現該保證,則會出現“ORA-01555快照太舊”錯誤。 但是,后續選擇可能無法得到相同的答案。

為了提供讀取隔離/可重復讀取,您必須放棄一些並發性,因為您必須鎖定表以防止更新。 Oracle選擇高度並發 - 讀者不會阻止。

如果您只是在給定時間點查找數據,Oracle確實提供了閃回查詢。

復制並粘貼作為對問題的評論給出的答案:

Oracle中的默認隔離級別是“已提交讀取”(您“看到”其他事務所提交的更改,即使它們是在事務啟動后提交的)。 Oracle還允許您將隔離級別設置為“可序列化”(您只“看到”在事務開始時由其他事務提交的更改)或“只讀”(如“可序列化”,但它不是允許INSERT,UPDATE或DELETE)。 有關所有詳細信息,請參閱鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM