關于達夢資料庫事務的隔離級别介紹
- 1、 達夢與Oracle支援的隔離級别
-
- 髒讀
- 不可重複讀
- 幻讀
- 2、隔離級别的實作
-
- 讀送出隔離級
- 串行化隔離級
- 讀未送出隔離級
- 隻讀事務
1、 達夢與Oracle支援的隔離級别
達夢 | Oracle |
---|---|
讀未送出 | 無 |
讀送出 | 讀送出 |
重複讀 | 重複讀 |
序列化 | 序列化 |
然後我們再來看SQL-92 定義的四個隔離級别

也就是說Oracle資料庫是沒有髒讀的,達夢和Oracle一樣預設的隔離級别都是讀送出。
首先我們先來認識一下髒讀、不可重複讀、幻讀的概念,再來介紹怎麼實作這幾種隔離級别。
髒讀
比如說我們開啟2個會話,當A會話的事務可以讀取到B會話的已修改尚未送出的事務,這個時候就會産生髒讀。
不可重複讀
當A會話的同一個事務、同一個查詢,如果是因為其他會話的事務修改過或删除的資料,造成查詢的資料不一緻。這種現象稱為不可重複讀。
幻讀
當A會話的同一個事務、同一個查詢,如果是因為其他會話的事務添加的資料,造成查詢的資料不一緻。這種現象稱為幻讀。
2、隔離級别的實作
讀送出隔離級
資料庫的讀送出隔離可以確定隻通路到已送出事務修改的資料,保證資料處于一緻性狀态。
串行化隔離級
在要求消除不可重複讀取或幻像讀的情況下,我們可以設定事務隔離級為串行化。跟讀送出隔離級相比,串行化事務的查詢本身不會增加任何代價,但修改資料可能引發“串行化事務被打斷”錯誤。
具體來說,當一個串行化事務試圖更新或删除資料時,而這些資料在此事務開始後被其他事務修改并送出時,DM 資料庫将報“串行化事務被打斷”錯誤。應用開發者應該充分考慮串行化事務帶來的復原及重做事務的開銷,從應用邏輯上避免對相同資料行的激烈競争導緻産生大量事務復原。并結合應用邏輯,捕獲“串行化事務被打斷”錯誤,進行事務重做等相應處理。如果系統中存在長時間運作的寫事務,并且該長事務所操作的資料還會被其他短事務頻繁更新的話,最好避免使用串行化事務。
讀未送出隔離級
讀未送出隔離級别是最不嚴格的隔離級别。實際上,在使用這個隔離級别時,會發生髒讀、不可重複讀和幻像。一般來說,讀未送出隔離級别通常隻用于通路隻讀表和隻讀視圖,以消除可見性判斷帶來的系統開銷,提升查詢性能。
隻讀事務
除了前面所述的各種标準特性外,DM 資料庫還支援隻讀事務,隻讀事務隻能通路資料,但不能修改資料。并且隻讀事務不會改變事務原有的隔離級。