如何(SQL):使得一张表中的数据可以同时被多个源所获取而不重复

本文详细介绍了SQL中的排它锁XLOCK及READPAST参数的作用。XLOCK确保了事务级的排它性,防止其他事务访问被锁定的数据;READPAST则允许查询跳过被其他事务锁定的数据行,从而提高并发处理能力。文章还通过实例说明了这两种机制的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL提供的排它锁XLOCK,可以为我们提供事务级的排它性。即在某个事务对于表进行访问时,别的事物便无法对于表进行访问,并等待到事物完成。

这是我们不愿意看到的,我们系统这些已经被访问的数据好似消失了一般,而以后的操作将无视这些被访问的数据而执行。这就需要第二个参数READPAST ,他的作用是使得访问跳过那么些已经被其他事物锁住的数据行,而直接返回数据。

例如,假定表 T1 包含一个单精度整数列,其值为1、2、3、4 和 5。如果事务 A 将值 3 值更改为 8,但尚未提交,则 SELECT * FROM T1 (READPAST) 将生成值 1、2、4 和 5。使用 SQL Server 表实现工作队列时,READPAST 主要用于减少锁定争用。使用 READPAST 的队列读取器会跳过被其他事务锁定的队列项,跳至下一个可用的队列项,而不是等待其他事务释放锁。

那么对于一个被多个源同时访问的SQL,起就必须同时具有XLOck和readPast这样的特性,如

 

最后一项a为表Table上的索引,用以指定其查询时所用之索引。

 

相关内容http://msdn2.microsoft.com/zh-cn/library/ms187373.aspx

select * from  Table   with ( xlock , readpast , index (a ))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值