关于同时获取数据 不允许重复的问题

crazy_boom 2018-03-16 11:20:52
数据库:Sql2008R2
举例子 数据库中有10000条数据,每条数据为1个任务 。有50个人拿着手持取任务,同时点按钮获取自己的任务
要求严格按照先取先得的原则 并且不能有多人同时取到相同的任务

如何来实现?
我用Sql做了一个事物 手持APP 获取任务就是调用一次这个事物 可是现在仍然有多人获取到相同任务的情况。

事物执行的步骤: 1事物中先获取任务状态为未获取的 最小的任务号
2更新这条任务的状态 为已获取状态 并更新获取时间 精确到毫秒
3select 出这条任务的内容 APP 展示出select的内容


我的设计有什么不妥的地方吗?
...全文
689 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-03-16
  • 打赏
  • 举报
回复
二月十六 2018-03-16
  • 打赏
  • 举报
回复
在读取的时候有加锁吗?加锁情况什么样的?
crazy_boom 2018-03-16
  • 打赏
  • 举报
回复
您能把SQLQueryStress tool 这个工具发给我吗? 1438904@qq.com 这个邮箱谢谢你啦
引用 3 楼 yenange 的回复:
读取的时候不加锁就会有问题。
declare @piaoh varchar(20)
SELECT TOP 1 @piaoh=piaoh from renwu (XLOCK,ROWLOCK) where caozuoyuan='' ORDER BY piaoh
我的博客里写的比较详细了:http://blog.csdn.net/yenange/article/details/79580519
吉普赛的歌 2018-03-16
  • 打赏
  • 举报
回复
读取的时候不加锁就会有问题。
declare @piaoh varchar(20)
SELECT TOP 1 @piaoh=piaoh from renwu (XLOCK,ROWLOCK) where caozuoyuan='' ORDER BY piaoh
我的博客里写的比较详细了:http://blog.csdn.net/yenange/article/details/79580519
crazy_boom 2018-03-16
  • 打赏
  • 举报
回复
事物不是 按顺序执行的吗? 读取的时候没加锁


alter proc get_renwu @caozuoren varchar(10)
as

--内部变量声明
declare @recnum integer,
        @rowcount integer
set @recnum=0
 
declare @errcode integer
set @errcode=7300         
declare @return integer				
set @return=0
--启动事务处理
declare @tran_point int				 
set @tran_point=@@trancount		 
if @tran_point=0
	begin tran abc
else
    save tran abc
 

  --获取最小票号
  declare @piaoh varchar(20)
  select @piaoh=MIN(piaoh) from renwu where caozuoyuan='' 

  --更新获取到的任务
  update renwu set type=1,caozuoyuan=@caozuoren,lingqutime=CONVERT(varchar(23),GETDATE(),21) where piaoh=@piaoh

  --写表
  insert into renwu2
  (riqi,piaoh,jine,type,caozuoyuan,lingqutime,intime)
  select riqi,piaoh,jine,type,caozuoyuan,lingqutime,CONVERT(varchar(23),GETDATE(),21) from renwu where piaoh=@piaoh
   
 
if @tran_point=0
	commit tran abc
goto return_lab
err_lab:
rollback tran abc
return_lab:
return @return 


27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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