SqlServer2008实例19事务、锁定和并发之配置会话的事务加锁行为

    下面是如何使用SET TRANSACTION ISOLATION LEVEL命令来为连接内使用的T-SQL语句设置默认的事务加锁行为。在同一时间只可以设置一个隔离级别,除非显式设置,否则隔离级别不会改变。SET TRANSACTION ISOLATION LEVEL允许你为特定的数据库连接修改加锁行为。此命令的语法如下:

SET TRANSACTION ISOLATION LEVEL
    {READ UNCOMMITED
    |READ COMMITED
    |REPEATABLE READ
    |SNAPSHOT
    |SERIALIZABLE
    }

1.使用SERIALIZABLE隔离级别来查询表中的内容。 

use AdventureWorks
go

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
go

BEGIN TRAN
SELECT AddressTypeID,Name
FROM Person.AddressType
WHERE AddressTypeID BETWEEN 1 AND 6

2.在第二个查询容查看由SERIALIZABLE隔离级别生成的锁类型

SELECT resource_associated_entity_id,resource_type,
	   Request_mode,Request_session_id
FROM sys.dm_tran_locks	 

3.返回第一个查询窗口,执行下面的代码结束事务并移除锁

COMMIT TRAN

4.在第一个查询窗口中使用READ UNCOMMITED隔离级别来读取某个范围的行

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
go

BEGIN TRAN
SELECT AddressTypeid,Name
FROM person.addressType
WHERE AddresstypeID BETWEEN 1 AND 6	

在第二个查询窗口执行下面的的查询查看READ UNCOMMITTED隔离级别的锁类型

SELECT resource_associated_entity_id,resource_type,
	   Request_mode,Request_session_id
FROM sys.dm_tran_locks	

    不像SERIALIZABLE隔离级别,READ UNCOMMITTED隔离级别不在Person .AddressType表的键上创建额外的锁。
    返回到第一个执行READ UNCOMMITTED查询的查询编辑器,结束事务:
    COPIMIT TRAN
5.使用SNAPSHOT隔离级别。

在第一个查询窗口执行下面的代码:

ALTER DATABASE AdventureWorks
SET ALLOW_SNAPSHOT_ISOLATION ON
GO

use AdventureWorks
go

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

BEGIN TRAN

SELECT CurrencyRateID,EndofdayRate
FROM Sales.CurrencyRate
WHERE CurrencyRateID = 8317

6.在第二个查询窗口中执行下面的代码:

USE AdventureWorks
go

UPDATE Sales.CurrencyRate
SET EndOfDayRate=1.00
WHERE CurrencyRateID=8317

返回到第一个查询编辑器,重新执行下面的查询:

SELECT CurrencyRateID,EndofdayRate
FROM Sales.CurrencyRate
WHERE CurrencyRateID = 8317

    即使第二个查询编辑器的查询更新了行,该查询还是返回了和前面械同的结果。SELECT没有因为读取行而被阻塞,而UPDATE也没有被阻塞进行修改。
    现在将提交这个事务并重新执行这个查询:

COMMIT TRAN

SELECT CurrencyRateID,EndofDayRate
FROM Sales.CurrencyRate
WHERE CurrencyRateID=8371

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值