事務隔離級別

2021-04-23 12:02:12 字數 1984 閱讀 8171

需要防止的現象和事務隔離級別

ansi/iso sql 標準(sql92)定義了四種事務隔離級別(transaction isolation level),這四種隔離級別所能提供的事務處理能力各不相同。這些事務隔離級別是針對三種現象定義的,在併發事務執行時,需要阻止這三種現象 中的一種或多種發生。

三種需要阻止的現象(preventable phenomena)是:

* 髒讀取(dirty read):乙個事務讀取了被其他事務寫入但還未提交的資料。

* 不可重複讀(nonrepeatable read):乙個事務再次讀取其之前曾經讀取過的資料時,發現資料已被其他已提交的事務修改或刪除。

* 不存在讀(虛讀)(phantom read):事務按照之前的條件重新查詢時,返回的結果集中包含其他已提交事務插入的滿足條件的新資料。

sql92 標準中定義了四個隔離級別,在各隔離級別中,允許發生上述三種需要阻止的現象中的一種或多種。詳細情況如下:

各隔離級別中允許出現的需要防止的讀取現象

隔離級別                   髒讀取     不可重複讀取      不存在讀取

讀未提交                  允許            允許              允許

(read uncommitted)

讀已提交                   不允許        允許              允許

(read committed)

可重複讀                    不允許         不允許            允許

(repeatable read)

序列化                     不允許           不允許             不允許

(serializable)

oracle 支援三種事務隔離級別:已提交讀取,序列化,以及 sql92 中沒有包含的唯讀模式(read-only mode)。已提交讀取是 oracle 預設使用的事務隔離級別。

oracle常常使用語句級(state-level)一致性,保證資料在語句的生命期之間是可見的但不能被改變。事務由多個語句組成,當使用事務時,事物級(transaction-level)一致性在整個事務生命期中保證資料對所有語句都是可見的。

oracle通過scn(syatem change number)實施一致性。乙個scn是乙個面向時間的資料庫內部鍵。scn只會增加不會減少,scn表示了時間上的乙個點,每個資料塊都有乙個scn,通過比較這個點實施操作。

事務級一致性

set transaction 的乙個作用是確保事務級一致或語句級一致中有乙個實施。oracle使用這些術語:

isolation level read committed 表示語句級一致

isolation level serializable 表示事務級一致。

例:設定隔離級別

1、設定乙個事務的隔離級別

set transaction isolation level read committed;

set transaction isolation level serializable;

2、設定增個會話的隔離級別

alter session set isolation_level= read committed;

alter session set isolation_level= serializable;

下面的語句也能確保事務級一致:

set transcation read only

任何企圖在唯讀(read only)事務中修改資料的操作都會丟擲乙個異常。但是,read only事務只能在下列語句中使用:

select(沒有for update子句)

lock table

set role

alter system

alter alarm

即使沒有改變任何資料,read only事務依然必須使用乙個commit或rollback以結束整個事務。

事務隔離級別

1 serializable 最嚴格的spring事務隔離級別,事務序列執行,資源消耗最大 3 read committed 大多數主流資料庫的預設spring事務隔離等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了 髒讀取 該級別適用於大多數系統。4 read uncommi...

事務隔離級別

四種隔離級別 隔離級別 髒 讀不可重複讀取 幻 像讀操作未提交 read uncommitted 是是 是讀操作已提交 read committed 否是 是可重複讀 repeatable read 否否 是快照否否 否可序列讀 serializable 否否 否 sql server 還支援使用行...

事務隔離級別

1.read uncommitted 讀未提交。可以讀取未提交的資料。比如 我有乙個賬戶裡面有1000元,對方給我打了1000還未提交,我這時檢視會有2000,我以為收到了,放心睡覺去了,可是對方他這1000給回滾了。實際我賬戶還是1000 這是髒讀 2.read committed 讀提交。讀到資...