如何查询表中满足条件的所有数据, 并锁定其中一行数据

baidu_26593517 2015-03-15 04:47:18

主要就是实现
程序共四个帐号,每一个账号只能由一个用户使用,有其他思路请 指点
先谢啦
...全文
149 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
专注or全面 2015-03-17
  • 打赏
  • 举报
回复
UPDLOCK, READPAST
baidu_26593517 2015-03-15
  • 打赏
  • 举报
回复
在软件里该怎么处理呢?请楼上指点一下 谢谢@oraclecaicai ,您的指点让我学到了好多东西我知道该怎么弄了
极品老土豆 2015-03-15
  • 打赏
  • 举报
回复
为什么不在程序上实现,一个账号不能多个用户登录。
oraclecaicai 2015-03-15
  • 打赏
  • 举报
回复
假设你的事务隔离级别是默认的read committed,如果只是查询,不修改签到标记,可以使用table hint: SELECT TOP 1 ID FROM A WITH (UPDLOCK, READPAST) WHERE 签到标记 = 0 这样做的效果是: (1) 程序会去寻找一个未使用的账户的记录,并对其加更新锁(UPDLOCK),这样其它的进程就无法对它也加更新锁。 (2) 当程序读取到一条已经被其它进程加锁的记录时会自动跳过(READPAST)。 (3) 如果所有的帐户都已经被使用或被其它进程锁定,那么查询结果集为空。 如果你直接修改签到标记,那么一条UPDATE语句就可以了。 DECLARE @account_id INT UPDATE TOP 1 A SET 签到标记 = 1 , @account_id = id WHERE 签到标记 = 0 然后把@account_id的值返回就可以了。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧