读取数据库记录马上锁定,其他人不能再查看?

问题描述

一个人读取记录1后,其他人只能读取2或后面的记录,不知道如何实现?

解决方案

解决方案二:
使用数据库的查询锁
解决方案三:
那数据库的并发特性还有什么价值?
解决方案四:
http://blog.csdn.net/zjcxc/archive/2006/08/28/1133843.aspx1.建立测试环境USEtempdbGOCREATETABLEdbo.tb(idintidentity(1,1),namenvarchar(128))INSERTtb(name)SELECTTOP100nameFROMsyscolumnsGO2.新建窗口模拟第1个用户--查询窗口发出下面的查询语句BEGINTRAN--事务不提交或者回滚,以保持锁不释放SETROWCOUNT20SELECT*FROMtbWITH(UPDLOCK,READPAST)--UPDLOCK让锁保留到事务结束,READPAST跳过已经锁定的数据3.新建窗口模拟第2个用户(语句与第1个用户一样,只是在另一个连接中执行)--查询窗口发出下面的查询语句BEGINTRAN--事务不提交或者回滚,以保持锁不释放SETROWCOUNT20SELECT*FROMtbWITH(UPDLOCK,READPAST)--UPDLOCK让锁保留到事务结束,READPAST跳过已经锁定的数据4.结果你会看到查询窗口1列出了前20条数据查询窗口1列出了21-40条数据这样就实现了不同的用户取不同数据的需求.注:处理完成后,删除记录,然后提交事务就可以了.
解决方案五:
学习
解决方案六:
应该可以利用权限的吧
解决方案七:
两种方案:1,在被访问的表中添加字段,用来标记该记录当前是否被占用,程序读取前先检查该字段的状态,举例:可以用一个字符型的字段,在有用户访问时写上当前用户的ID,访问结束时再将该位置清空。2,在数据库创建一个“当前记录访问表”,记录“用户ID,正在使用的记录ID号”,程序里产生访问请求的时候先检查待访问的记录ID在不在该表内,不在则开始访问并同时向“当前记录访问表”增加一条新的记录,记录当前用户正在使用该记录ID,当用户访问结束时再将该条记录删除。如果楼主你的程序的用户每个人都有各自的数据库访问账户的话,可以参照“jinjazz(近身剪)”的方法进行访问加锁(我估计你不是这样做的吧),但是如果你的程序采用统一的数据库访问账户,“jinjazz(近身剪)”也不能满足你的要求,因为这种情况下,所有用户事实上都是以相同的一个数据库身份来读取数据的,加锁就没有任何意义了,这时你可以考虑使用我说的两种方案。
解决方案八:
我也测试过了,用1,在被访问的表中添加字段,用来标记该记录当前是否被占用,程序读取前先检查该字段的状态,举例:可以用一个字符型的字段,在有用户访问时写上当前用户的ID,访问结束时再将该位置清空。2,在数据库创建一个“当前记录访问表”,记录“用户ID,正在使用的记录ID号”,程序里产生访问请求的时候先检查待访问的记录ID在不在该表内,不在则开始访问并同时向“当前记录访问表”增加一条新的记录,记录当前用户正在使用该记录ID,当用户访问结束时再将该条记录删除。上面两种方法有时候还是会出现同时打开一个记录的情况
解决方案九:
收藏
解决方案十:
学习之中
解决方案十一:
MARK
解决方案十二:
up

时间: 2024-12-24 02:13:28

读取数据库记录马上锁定,其他人不能再查看?的相关文章

JAVA频繁访问oracle数据库获取记录(间隔1秒就读取数据库记录或修改数据库记录),如何操作

问题描述 JAVA频繁访问oracle数据库获取记录(间隔1秒就读取数据库记录或修改数据库记录),使用什么连接方式最好(高效)??,用jdbc连接池好吗?,怎么使用jdbc连接池后释放资源而不关闭连接呢??,谢谢各位了!!

asp 读取数据库记录

asp教程 读取数据库教程记录   <% '     Dpath ="www.3lian.net/dbaseMateyDBWeb_^%$#@.mdb"   Set Conn=Server.CreateObject("Adodb.connection")     if request.QueryString("action")="list" then    Set Rs =Server.CreateObject("

mysql不用rand()函数实现随机读取数据库记录的方法

mysql教程不用rand()函数实现随机读取数据库教程记录的方法 ,以及google了一下相关的文件,发现大家几乎清一色使用 order by rand() 来达到该目的,但是实际上存在非常严重的性能问题. 如果你的数据库里只有几百条,且调用次数又不多的情况下,你爱用啥方法就用啥方法. 但如果你有10万或100万或更多条数据的话,那么每次执行带 order by rand() 的 sql 语句的时候,mysql服务器需要计算出10万或100万或更多个随机数,可想而知对数据库服务器的资源浪费有多

简单高效:不重复随机读取数据库记录

数据|数据库|随机|重复 看到经常有人问这个问题.又到网上找了些看,觉得写得不满意.大多读取记录到数组里去抽取.昨天又看到人写,心血来潮就顺手想了个,个人认为这种方法应该错吧,呵呵.刚好20行-_-实现方法:1.通过recordset游标可移动的特性,在已打开记录集里移动到随机位置读取记录.而且可以将就使用页面中已打开的RS对象.2.将出现过的随机数保存到一个字符串中,通过instr函数来检查是否重复,重复则递归调用函数至不重复. 数据库打开查询若干,省略... ...Set rs = Serv

ASP+Access随机读取数据库记录的方法

ASP&Access随机读取某段数据 在网上也搜索了很多,分享下我的方法... 以下是源代码:Randomize(Timer()) SQL = "SELECT TOP 100 ID FROM table1 ORDER BY Rnd(-(ID + " & Int((10000 * Rnd) + 1) & "))" Set RS = Server.CreateObject("ADODB.RecordSet") RS.Open 

php根据参数从读取数据库记录

 代码如下 复制代码 $host = 'localhost'; $user_name = 'root'; $password = 'admin'; $id = $_get['id']; $conn = mysql教程_connect($host,$user_name,$password); if(!$conn) {     die('数据库连接失败:'.mysql_error()); } mysql_select_db('test'); $sql = 'select id,name,city f

ASP.NET 2.0中随机读取Access数据库记录

[导读]由于使用ADO访问Access数据库会有缓存,这在随机提取数据库数据时,例如:sql="select top 10 Title,objectGuid from Document Order By Rnd(id)",将得不到随机记录,本文中给出的例子可以克服这一缺陷,实现数据库的随机读取. 由于使用ADO访问Access数据库会有缓存,这在随机提取数据库数据时,例如:sql="select top 10 Title,objectGuid from Document Or

java基础-java读取数据库中图片的地址,然后再显示在jLabel框中,但是运行后没有加载图片

问题描述 java读取数据库中图片的地址,然后再显示在jLabel框中,但是运行后没有加载图片 我是通过新建函数来访问数据库的 public void getData(String medname){ String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; String url="jdbc:sqlserver://localhost:1433;DatabaseName=account"; Strin

数据库记录安全解决方案(二)

数据库记录安全解决方案 http://netkiller.github.io/journal/mysql.security.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> 版权 2014 http://netkiller.github.io 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信