初学者的学习-11->Transaction Isolation Level
SET TRANSACTION ISOLATION LEVEL
READ COMMITTED
| READ UNCOMMITED
| REPEATABLE READ
| SERIALIZABLE
DBCC USEROPTIONS -->To Display the current Transaction Isolation level
有哪位大虾,可以给出具体的描述和例子 ?
READ UNCOMMITED 似乎是 SQLSERVER 特有的?
问题点数:100、回复次数:4Top
1 楼enhydraboy(乱舞的浮尘)回复于 2003-03-04 13:03:38 得分 59
我做了一个测试,我都是在Query Anylaze中作的
1 先建一个表
CREATE TABLE [a] (
[c1] [int] IDENTITY (1, 1) NOT NULL ,
[c2] [varchar] (2) NULL
) ON [PRIMARY]
GO
2 开两个新的命令窗口(等于两个连接)
3 在窗口A中输入下面命令
begin tran
insert into a(c2) values('aa')
注意,不要写commit trans
提示插入一条记录
4 在窗口B中输入下面命令
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
begin tran
insert into a(c2) values('bb')
提示插入一条记录
5 在窗口B中输入下面命令
select * from a
在READ UNCOMMITTED模式下,是不会等待窗口A的提交事务。
可以看到记录如下
c1 c2
----------- ----
1 aa
2 bb
6 在窗口A中输入命令
select * from a
系统就等待,等窗口B提交事务。
7 在窗口B中输入命令
commit tran
窗口A就得到记录
c1 c2
----------- ----
1 aa
2 bb
8 在窗口A中输入
commit tran
9 在窗口B中输入
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
总结
READ UNCOMMITTED
执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。
Top
2 楼peterzhou2000()回复于 2003-03-04 13:13:39 得分 1
更新数据时如何实现行级别锁定,而不是表级别的锁定。Top
3 楼leimin(黄山光明顶)回复于 2003-03-04 14:56:43 得分 20
对enhydraboy() 的实例的补充:
REPEATABLE READ
| SERIALIZABLE
会产生幻影数据
比如:
有一长事务TRAN A 再更新某条记录,TRAN B在TRAN A没有提交是就提交一UPDATE记录,TRANS A将可以重新读取TRANS B的根新记录。
Top
4 楼leimin(黄山光明顶)回复于 2003-03-04 15:26:00 得分 20
| REPEATABLE READ
| SERIALIZABLE
是可以读取幻影数据。在一个事务中可以读取另外一个事务处理的对象!Top




