使用事务与锁,实现一个用户取过的数据不被其他用户取到

原创 2006年08月28日 20:31:00

问题描述:

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

 

问题解决:

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

而本文利用事务与锁来控制数据的处理,不需要增加任何标志列

下面是具体的解决示例

 

1.       建立测试环境

USE tempdb

GO

 

CREATE TABLE dbo.tb(

id int identity(1, 1),

name nvarchar(128))

 

INSERT tb(name)

SELECT TOP 100

name

FROM syscolumns

GO

 

2.       模拟第1个用户

-- 查询窗口发出下面的查询语句

BEGIN TRAN

        -- 事务不提交或者回滚, 以保持锁不释放

SET ROWCOUNT 20

SELECT *

FROM tb WITH(UPDLOCK, READPAST)

        -- UPDLOCK 让锁保留到事务结束, READPAST 跳过已经锁定的数据

 

3.       模拟第2个用户(语句与第1个用户一样,只是在另一个连接中执行)

-- 查询窗口发出下面的查询语句

BEGIN TRAN

        -- 事务不提交或者回滚, 以保持锁不释放

SET ROWCOUNT 20

SELECT *

FROM tb WITH(UPDLOCK, READPAST)

        -- UPDLOCK 让锁保留到事务结束, READPAST 跳过已经锁定的数据

 

4.       结果

你会看到

查询窗口1列出了前20条数据

查询窗口1列出了21-40条数据

 

这样就实现了不同的用户取不同数据的需求.

 

: 处理完成后, 删除记录, 然后提交事务就可以了.

 

 

 

单机登录实现思路(强制下线其他用户)

http://www.cnblogs.com/qsl568/p/3830354.html 单机登录实现思路(强制下线其他用户) 主流的网站都是限制用户单点登录的,为什么要实现单点登...

shell脚本中使用其他用户执行脚本

需求: 在某些软件安装过程中,要创建独立用户,然后以该用户运行某些安装操作,如gitolite安装过程,创建git用户并执行安装 方法1:sudo -u user ... sudo -u git...

C# 使用其他用户启动程序

一下代码转载自CodeProject,经过删减: /// /// Logon option. /// [FlagsAttribute] public enum LogonF...

VB.NET 使用其他用户启动程序

Imports System.Runtime.InteropServices Imports System.Text Public Class RunAs Private Const LOG...

如何在linux里将某个用户安装的eclipse共享给其他用户使用

如题,由于要学习hadoop,所以我在我的ubuntu里新建了一个用户user2专门用于安装hadoop环境,原来的用户是user1,原来user1用户已经安装了eclipse,所以我想在user2用...

sunas 改变其他用户运行方式

  • 2009年11月06日 23:24
  • 4KB
  • 下载

用户、会话及事务控制-------并发使用数据环境

一、 1.事务是作为一个整体提交给数据库用于处理的工作单元(一个数据库的会话可能由一个或多个事务组成)。换种说法,事务是指一条或多条查询。在数据库中,这些查询作为一个整体,全部执行或全部不执行。 ...

Windows下以其他用户身份运行程序

runas /savecred /usr:administrator "C:\Program Files\SogouExplorer\sogouexplorer.exe" http://bl...
  • chruan
  • chruan
  • 2012年08月07日 10:58
  • 5900

其他用户已经限定了可以输入该单元格的数值

我想把上面的定金改为首付款,谁知,报错: 解决办法: 选中这一列,点数据-数据有效性 ,选择第一个‘数据有效性’,出现对话框: 点‘是’, , 将‘序列’改为‘任何...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用事务与锁,实现一个用户取过的数据不被其他用户取到
举报原因:
原因补充:

(最多只允许输入30个字)