隔离级别 实例分析

事务的并发程度取决于事务的隔离级别,如果没有引入隔离界别,则事务并发会引起读脏数据,不可重复读,幻想读

 

Create table t1 ( a int)

Insert into t1 values(1)

Insert into t1 values(2)

 

1. Manager stdio开两个窗口,分别设置SET TRANSACTION ISOLATION level READ UNCOMMITTED

1)窗口1 begin tran 

update t1 set a=3 where a=1—更新未提交

2)窗口2  select * from t1  --读未提交数据,事务无需等待,如果窗口1rollback后,则窗口2的数据为脏数据,此隔离级别和读提交隔离级别中使用with(nolock)相同,因此在统计数据时使用

3)rollback 窗口1

2.两个窗口设置SET TRANSACTION ISOLATION level READ COMMITTED

1)窗口1 begin tran 

update t1 set a=3 where a=1—更新未提交

2)窗口2 select * from t1—读未提交数据,事务需要等待数据提交,此时防止了读脏数据

3Rollback窗口1,窗口2

4)窗口1 begin tran

       Select * from t1

5)窗口2 update t1 set a=3 where a=2—此时无需等待,立刻更新

6)窗口1 接着select * from t1  则和开始select出来的数据不一致,所以此隔离级别不能防止不可重复读

7rollback 窗口1.2

3.两个窗口设置SET TRANSACTION ISOLATION level REPEATABLE READ

1)窗口1 begin tran

       Select * from t1

2)窗口2 update t1 set a=3 where a=2—此时需要等待

3)窗口1 接着select * from t1  则和开始select出来的数据一致,此隔离级别不能防止不可重复读

4rollback 窗口12

5)窗口1 begin tran

       Select * from t1

6)窗口2insert into t1 values(6) –此事务无需等待,直接插入

7)窗口1接着select * from t1 则在此事务中出现读两次不一致,而新出现的为幻像,此可重复读隔离级别不能防止幻想读

8rollback 窗口1

4.两个窗口设置SET TRANSACTION ISOLATION level SERIALIZABLE

1)窗口1 begin tran

       Select * from t1

2)窗口2insert into t1 values(6) –此事务需要等待窗口1事务完成

3)窗口1接着select * from t1 两次读一致,不会出现幻像,此可隔离级别不能防止幻想读,同样也能够防止读脏数据和不一致读

 

5 ALTER DATABASE test2

SET ALLOW_SNAPSHOT_ISOLATION  ON;

两窗口设置SET TRANSACTION ISOLATION LEVEL SNAPSHOT

1)窗口1 begin tran

select * from t1

2)窗口2 insert into t1 values(8

3)窗口1select * from t1 –因为数据更改在快照中,所以数据读取一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值