时间:2021-07-01 10:21:17 帮助过:11人阅读
这个问题一直被很多人关注,基本上得到的答案是两种倾向,一种是锁一种是给记录打标记(也就是update)。
对于应用来说,我并不提倡人为给记录加锁,这样会惹来很多麻烦,况且锁并不能解决所有问题,如果你有这方面好的经验我们可以进一步交流。
- <br>set nocount on <br>use tempdb <br>go <br>if (object_id ('tb' ) is not null ) <br>drop table tb <br>go <br>create table tb (id int identity (1 , 1 ), name varchar (10 ), tag int default 0 ) <br>insert into tb (name ) select 'a' <br>insert into tb (name ) select 'b' <br>insert into tb (name ) select 'c' <br>insert into tb (name ) select 'd' <br>insert into tb (name ) select 'e' <br>go <br>update top (2 ) tb with (rowlock , readpast ) set tag = 1 output inserted . id , inserted . name where tag = 0 <br>go <br>update top (2 ) tb with (rowlock , readpast ) set tag = 1 output inserted . id , inserted . name where tag = 0 <br>go <br>update top (2 ) tb with (rowlock , readpast ) set tag = 1 output inserted . id , inserted . name where tag = 0 <br>go <br>set nocount off <br>/* <br>id name <br>----------- ---------- <br>1 a <br>2 b <br>id name <br>----------- ---------- <br>3 c <br>4 d <br>id name <br>----------- ---------- <br>5 e <br>*/ <br> <br>如果你有更好的建议,我们不妨探讨一下。