sql 隔離級別

2022-02-12 22:25:59 字數 1722 閱讀 5542

begin 

trybegin tran  

insert into dbo.transtesttable values (66,

'66'

);  

update dbo.transtesttable 

set[name] = 

'77'

where [id] = 66;  

--raiserror (

'error raised in try block.'

,16,1);  

commit tran  

end 

trybegin 

catch

rollback tran  

end 

catch

create database test

go--建立測試用表

use test

gocreate table 帳戶表

(帳號 char(4),

餘額 int)go

insert 帳戶表

select 'a',100

union all

select 'b',200

select * from 帳戶表;

delete from 帳戶表 where 帳號='b'

--髒讀

begin tran

update 帳戶表 set 餘額=100 where 帳號='a'

waitfor delay '00:00:10' --等待10秒

update 帳戶表 set 餘額=104 where 帳號='a'

commit tran

set transaction isolation level read uncommitted

begin tran

select 餘額 from 帳戶表 where 帳號='a'

commit tran

-- 不可重複的讀

set transaction isolation level repeatable read

--或者 set transaction isolation level read uncommitted

begin tran

select 餘額 from 帳戶表 where 帳號='a'

waitfor delay '00:00:10' --等待10秒

select 餘額 from 帳戶表 where 帳號='a'

commit tran

begin tran

update 帳戶表 set 餘額=130 where 帳號='a'

commit tran

-- 幻讀

set transaction isolation level read committed

--或者 set transaction isolation level read uncommitted

--或者 set transaction isolation level repeatable read

begin tran

select * from 帳戶表

waitfor delay '00:00:10' --等待10秒

select * from 帳戶表

commit tran

begin tran

insert into 帳戶表 values('c','300')

commit tran

SQL 隔離級別

在sql標準中定義了四種隔離級別,每一種級別都規定了乙個事務中所做的修改,哪些在事務內和事務間是可見的,哪些是不可見的。較低階別的隔離通常可以執行更高的併發,系統的開銷也更低。簡單的介紹四種隔離級別 1 read uncommitted 未提交讀 在read uncommitted級別,事務中的修改...

SQL的隔離級別

資料庫的隔離級別主要是為讀操作定義保護級別的 對於修改寫操作,無論哪種隔離級別都可以保證寫操作的正確執行。sql標準為三種 dirty reads 事務t2提交了資料,事務t1這時讀取了t2提交的資料,t2發生異常rollback,那麼t1讀取的資料就是有問題的資料,是dirty read。unre...

SQL 事務隔離級別

髒讀 包含未提交資料的讀。例如,事務1 更改了某行。事務2 在事務1 提交更改之前讀取已更改的行。如果事務1 回滾更改,則事務2 便讀取了邏輯上從未存在過的行。不可重複讀取 當某個事務不止一次讀取同一行,並且乙個單獨的事務在兩次 或多次 讀取之間修改該行時。因為在同乙個事務內的多次讀取之間修改了該行...