SQL 92 隔離級別理解和測試

2022-04-01 04:17:31 字數 2603 閱讀 7870

以前對資料庫的隔離級別,有所了解,但不知道真正其中的區別。今天就討論一下這4個隔離級別

下面是4個隔離級別,在sql server 2005裡的介紹

read uncommitted

指定語句可以讀取已由其他事務修改但尚未提交的行。

read committed

指定語句不能讀取已由其他事務修改但尚未提交的資料。這樣可以避免髒讀。其他事務可以在當前事務的各個語句之間更改資料,從而產生不可重複讀取和幻像資料

repeatable read

其他事務可以插入與當前事務所發出語句的搜尋條件相匹配的新行。如果當前事務隨後重試執行該語句,它會檢索新行,從而產生幻讀

serializable

範圍鎖處於與事務中執行的每個語句的搜尋條件相匹配的鍵值範圍之內。這樣可以阻止其他事務更新或插入任何行

建立環境:

create table t_emp(id numeric(10)

,name varchar(

10),

salary numeric(10,

2));

插入資料:

insert into t_emp values(1,

'jack',

10000.50

);insert into t_emp values(2,

'jack2',

8000.50

);insert into t_emp values(3,

'jack3',

120000

);insert into t_emp values(4,

'jack4',

5000

);insert into t_emp values(5,

'jack5',

3000

);如果乙個事務在提交操作結果之前,另乙個事務可以看到該結果,就會發生這種情況

測試語句一:

set transaction isolation level read uncommitted

begin tran

select 

*from  dbo.t_emp 

whereid=

1測試語句二:

set transaction isolation level read uncommitted

begin tran

update t_emp 

setname='

zping.com

'whereid=

1這時在兩個窗體間執行,在一中可以看到,二中未提交的資料。

如果乙個事務在提交結果之前,另乙個事務可以修改和刪除它

顯示例子:

set transaction isolation level read committed

begin

tran

select

*from

dbo.t_emp 

whereid=

1waitfor

delay 

'00:00:03

'select

*from

dbo.t_emp 

whereid=

1set transaction isolation level read committed

begin

tran

--1,

insert into t_emp values(1,'33',434)

--2,

delete

t_emp 

whereid=

1--3;

update t_emp set name='fff' where id=1

--4;update t_emp set id=1 where id=2

commit

乙個事務讀取資料後,另乙個事務修改第乙個事務讀取當前結果,情況如下:

對應1,增加一條「id=1」的記錄。

對應2,將"id=1"的資料記錄刪除。

對應2,修改結果「id=1"記錄其他列的資訊。

對應3,修改資料」id=2「的資料為」id=1「的記錄。

這時是看不到事務未提交的資料的。

如果乙個事務在提交查詢結果之前,另乙個事務可以更改該結果

測試例子:

set transaction isolation level  repeatable read

begin

tran

select

*from

dbo.t_emp 

waitfor

delay 

'00:00:03

'select

*from

dbo.t_emp

set transaction isolation level  repeatable read

begin

tran

insert

into

t_emp 

values(1

,'33'

,434

)commit

先執行1,在執行2

這時:在事務1執行時,事務2可以增加一條"id=1"的資料,造成幻影讀。

MSSQL隔離級別理解

資料庫的六種隔離級別的自我理解 隔離級別 isolation level 分類 未提交事務 read uncommitted 已提交事務 read committed 可重複度 repeatableread 可序列化 serializable 最高端別 其實這幾種隔離級別最終是對資料庫增刪改查進行的...

資料庫隔離級別理解

1.為什麼要選擇隔離級別?通過例子說明隔離級別的必要性 假設乙個場景,一對夫妻共用乙個賬戶,妻子喜歡網上支付,丈夫喜歡刷卡支付。第一類丟失情況 整個過程中只有老公消費1000元,而最後時刻,老婆回滾事務,恢復到了原來的10000元,這不符合實際。這樣的兩個事務併發,乙個提交,乙個回滾導致的不一致成為...

資料庫事務隔離級別理解

資料庫事務的隔離級別有4個,由低到高依次為 read uncommitted read committed repeatable read serializable 這四個級別可以逐個解決髒讀 不可重複讀 幻讀 這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted r...