您的位置:首页 > 数据库

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

2006-12-11 10:49 465 查看
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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐