多个客户端同时查询和更新一张表的问题。
这张表随时会有新数据产先。这多个客户端,每个客户端定时从这个表拿未处理的一行数据,处理后(这个处理过程时间不定)再更新回去,这种并发的取,我没做过,有什么要注意的吗?我现在最关心的是:这几个客户端并发的select这个表,会不会多个客户端都取到了同一条数据,这是不允许的,请大家给方案!谢谢。
这张表随时会有新数据产先。这多个客户端,每个客户端定时从这个表拿未处理的一行数据,处理后(这个处理过程时间不定)再更新回去,这种并发的取,我没做过,有什么要注意的吗?我现在最关心的是:这几个客户端并发的select这个表,会不会多个客户端都取到了同一条数据,这是不允许的,请大家给方案!谢谢。
如果其他人不许读取,加个字段ifselect,--读取时用事务加锁,防止其他用户同时读
begin tran
select * from tb where with(xlock,paglock) id=10
commit tran
读取记录后,把记录的ifselect 更新为1,更新后再更新为0
为0的数据才允许读取
如果两个客户端同时都执行
begin tran
select * from tb where with(xlock,paglock) id=10
commit tran 难道真的会有一个查不到数据?我没法测试,不好模拟这样的并发环境啊如果真的是这样,就满足要求了。
select * from tb where with(xlock,paglock)
begin tran
select * from tb where with(xlock) id=10
commit tran
如果当前的锁不多,内存够大,不会升级为页锁或表锁,只是锁定当前受影响行
其他进程若也访问,则会被block,一直等待下去