ORACLE事物隔離級別

2021-06-20 11:07:58 字數 2452 閱讀 9727

oracle最低的隔離級別是read committed,它有如下特性:

可能有些人會奇怪,oracle最低的隔離級別怎麼不是read uncommitted呢?因為oracle有undo,它天生就是讀寫不阻塞,因此在oracle裡,根本就不會出現髒讀。

這裡解釋一下什麼是「語句級的讀一致性」,它是指 

當一條語句開始執行時,它既能看到本事務之前對資料的影響,也能看到語句開始執行時已提交事務對資料的影響。看下面這個例子:

1) 清空測試表資料:

sql> delete from test;

1 row deleted.

sql> commit;

commit complete.

2) 設定session1的隔離級別為read committed:

session1> alter session set isolation_level=read committed;

session altered.

3) 在session1中插入一條資料(未提交):

session1> insert into test values(1);

1 row created.

4) 在session1查詢:

sql> select * from test;

id----------

1在session1中可以看到本事務之前插入的資料。

5) 在session2中插入一條資料並提交:

session2> insert into test values(2);

1 row created.

session2> commit;

commit complete.

6) 在session1中查詢:

session1> select * from test;

id----------21

在session1中可以看到session2中已提交的資料。

在該隔離級別中,只要其它事務提交(即時其它事務在本事務之後才開始),也能看到其它事務對資料操作的結果,因此它不能阻止非重複讀和幻讀。

oracle的下乙個級別不是repeatable read,而是serializable,它又如下特性:

所謂「事務級的一致性」是指通過這種隔離級別,查詢的結果已經在事務啟動的時候確定,事務啟動後其它事務對資料的改變,對本事務的查詢沒有影響。看下面例子:

1) 清空測試表資料:

sql> delete from test;

2 rows deleted.

sql> commit;

commit complete.

2) 設定session1的隔離級別為serializable:

session1> alter session set isolation_level=serializable;

session altered.

3) 在session1中插入資料(未提交):

session1> insert into test values(1);

1 row created.

4) 在session1中查詢:

session1> select * from test;

id----------

1在session1中可以看到本事務之前插入的資料。

5) 在session2中插入一條資料並提交:

session2> insert into test values(2);

1 row created.

sql> commit;

commit complete.

6) 在session1中查詢:

session1> select * from test;

id----------

1在session1中無法看到session2中插入的資料。

read only和serializable類似,唯一不同的是它不允許在本事務中進行dml操作,見下面例子:

1) 清空測試表資料:

sql> delete from test;

1 row deleted.

sql> commit;

commit complete.

2) 設定session1的隔離級別為read only:

session1> set transaction read only;

transaction set.

3) 嘗試在session1中插入資料:

session1> insert into test values(1);

insert into test values(1)

*error at line 1:

ora-01456: may not perform. insert/delete/update operation inside a read only

transaction

插入資料出錯。

這種級別很少用到。

ORACLE事物隔離級別

oracle最低的隔離級別是read committed,它有如下特性 可能有些人會奇怪,oracle最低的隔離級別怎麼不是read uncommitted呢?因為oracle有undo,它天生就是讀寫不阻塞,因此在oracle裡,根本就不會出現髒讀。這裡解釋一下什麼是 語句級的讀一致性 它是指 當...

事物隔離級別

自然也是支援四種事務隔離級別的 read uncommitted,read commit,repeatable read serializable,下面就分別最四種隔離級別在實現的鎖機制做乙個簡介 serializable 1 這種隔離級別對資料的要求最為嚴格,自然也是效能最差的一種隔離級別。在所有...

事物隔離級別

隔離級別從松到緊 讀未提交,讀提交 重複讀,序列化。讀未提交 可能會出現髒讀的情況 例子 你去買5個包子。人多。店員拿的急多方乙個,袋子裡有6個,這個時候,你眼睛一瞟。心裡美滋滋。付錢的時候老闆檢查了一下,發現多了乙個,就拿走了乙個,然後你付錢走人 提交事務 這時候你就發現實際上袋子裡只有5個,但是...