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 便讀取了邏輯上從未存在過的行。不可重複讀取 當某個事務不止一次讀取同一行,並且乙個單獨的事務在兩次 或多次 讀取之間修改該行時。因為在同乙個事務內的多次讀取之間修改了該行...