笔记174 事务的隔离级别 开关与介绍 、应用
1 --事务的隔离级别 开关与介绍 、应用
2 --SET TRANSACTION ISOLATION LEVEL READ COMMITTED
3 --read uncommitted
4 --read committed
5 --repeatable read
6 --snapshot
7 --serializable
8
9
10 --read uncommitted:指定语句可以读取已由其他事务修改但尚未提交的行
11
12 --read committed:指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复
13 --读取和幻象数据,该选项是mssql的默认配置
14
15 --snapshot:即事务中任何语句读取的数据都只能是该事务开始之前就已存在的数据版本。事务只能识别在其开始之前提交的数据修改。在当前事务中执行的语句
16 --看不到当前事务开始以后其他事务所做的数据修改。其效果就好像事务中的语句获得了已提交数据的快照,因为该数据在事务开始时就存在
17
18 --serializable:指定语句不能读取已由其他事务修改但尚未提交的数据。任何其他事务都不能在当前事务完成之前修改由当前事务读取的数据。在当前事务完成之前
19 --其他事务不能使用当前事务中任何语句读取的键值插入新行
20
21 --每次只能设置一个隔离级别选项,而且设置的选项将一直对那个连接有效,直到显式更改该选项为止。
22 --事务中执行的所有读取操作都会在指定的隔离级别下运行,除非指定了锁提示或版本控制行为
23
24
25 -------------------------查询窗口1
26 USE TransactionTestDb
27 GO
28 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
29 GO
30 BEGIN TRANSACTION
31 GO
32 SELECT * FROM dbo.Orders
33 GO
34 SELECT * FROM dbo.Parts
35 GO
36 UPDATE dbo.Orders SET Qutantity=Qutantity+10
37 WHERE OrderNo =1;
38
39 WAITFOR DELAY '00:00:30'
40 GO
41
42 COMMIT TRANSACTION
43 GO
44
45 -----------------------查询窗口2
46 USE TransactionTestDb
47 GO
48 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
49 GO
50 BEGIN TRANSACTION
51 GO
52 SELECT * FROM dbo.Orders WHERE OrderNo =1
53 GO
54
55
56 COMMIT TRANSACTION
57 GO