实现一个用户取过的数据不被其他用户取到

实现一个用户取过的数据不被其他用户取到,第1张

实现一个用户取过的数据不被其他用户取到,第2张

认识到一个用户获取的数据不会被其他用户获取:

问题:

用ADO访问数据库时,从表中取出一定数量的记录(例如20行),取出后在程序中使用。使用后,删除记录(无需更新或删除记录)。在多用户操作下(每个用户采用相同的操作),如何保证一个用户选择的记录不被其他用户选择?

解决方法:

处理这类问题的一般方法是添加一个标志列,用户拍摄的每条记录都设置一个标志。新用户只能从标记为未使用的记录中获取记录。

在本文中,将使用事务和锁来控制数据处理,而不添加任何标志列。

解决方案的具体示例:

1.建立测试环境

使用tempdb

创建表dbo.tb(

id int identity(1,1),

姓名nvarchar(128))

插入tb(名称)

选择100

名字

来自系统列

去吧。模拟第一个用户。

-“查询”窗口发出以下查询语句

开始事务

-不提交或回滚事务以保持锁不被释放。

设置行数20

选择*

FROM TB WITH(up lock,READPAST)

-up lock保持锁定直到事务结束,READPAST跳过锁定的数据

3.模拟第二个用户(该语句与第一个用户相同,只是在另一个连接中执行)

-“查询”窗口发出以下查询语句

开始事务

-不提交或回滚事务以保持锁不被释放。

设置行数20

选择*

FROM TB WITH(up lock,READPAST)

-up lock保持锁定直到事务结束,READPAST跳过锁定的数据

4.结果

如您所见,查询窗口1列出了前20条数据,查询窗口1列出了21-40条数据。

这时候就实现了不同用户获取不同数据的需求。

注意:处理完成后,只需删除记录,然后提交事务。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 实现一个用户取过的数据不被其他用户取到

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情