社区
疑难问题
帖子详情
记录锁定问题
arclala
2003-03-18 08:45:01
在读取表的某一行记录时,锁定这一行,直到我更新了这行的记录后再解锁,不知怎样实现?
...全文
46
6
打赏
收藏
记录锁定问题
在读取表的某一行记录时,锁定这一行,直到我更新了这行的记录后再解锁,不知怎样实现?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
enhydraboy
2003-03-20
打赏
举报
回复
TO w_rose(w_rose):你的方法可行么,能不能把你的方法说详细点,最好给例子。
black_snail
2003-03-19
打赏
举报
回复
good explanation . looks more complicated than Oracle
enhydraboy
2003-03-18
打赏
举报
回复
需要先设定锁的隔离级别。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
说明如下:
有一个表的数据如下
c1 c2
----------- ------------------------
1 2003-01-08 12:00:00.000
2 2003-01-08 12:00:00.000
3 2003-01-08 12:00:00.000
在SQL Query Analyzer中开两个窗口(相当于两个连接)
1 窗口A中顺序执行
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
select * from t3 where c1=1 --此时已经锁定了该行
2 在窗口B中顺序执行
select * from t3 -可以得到结果
update t3 set c2='2003-1-8 12:00:00' where c1=1 --将会等待直到A释放行锁
3 在窗口A中顺序执行
commit tran --释放行锁,B的更新将被提交
根据楼主的意思,需求是:行锁,并且在查询时就锁住,而不是更新时,所以选择Reapeatable read是最合适的。
顺便说一句,采用表级锁,也可以,但是并发程度太低,所以应只在必要时才使用该选项。
BOL的说明:
SET TRANSACTION ISOLATION LEVEL
{ READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}
REPEATABLE READ
锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。
SERIALIZABLE
在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。
happydreamer
2003-03-18
打赏
举报
回复
在第一个连接中执行以下语句
begin tran
select * from table1 holdlock -holdlock人为加锁
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二个连接中执行以下语句
begin tran
select A,C from table1
where B='b2'
update table1
set A='aa'
where B='b2'
commit tran
若同时执行上述两个语句,则第二个连接中的select查询可以执行
而update必须等待第一个连接中的共享锁结束后才能执行 即要等待30秒
Rewiah
2003-03-18
打赏
举报
回复
BEGIN TRANSACTION
SELECT ... FROM tablename WITH (XLOCK) where ...
update tablename ...
commit TRANSACTION
w_rose
2003-03-18
打赏
举报
回复
不要给自己找麻烦,使用一个字段作为标志,使用触发器做约束。
Linux 网络服务器_搭建、配置与管理
清理历史命令
记录
、
锁定
关键文件、隐藏 Linux版本、定时清理垃圾邮件和小文件、优化内核参数、及时同步互联网的时间等等,都是优化系统的必要步骤 我们通过以优化 Linux为目的的一系列操作,其实也是在学习Linux操作...
【Salesforce】在Apex中解锁被
锁定
的
记录
或者
锁定
记录
在批准过程中,一条
记录
有可能根据设置被
锁定
。被
锁定
的
记录
无法更新任何数据,包括子对象的插入、更新等等。我们可以在Apex中实现将
记录
解锁的操作。 代码示例 ObjectName obj = [select id, name from ObjectName ...
oracle怎样对行
记录
解锁,oracle被
锁定
的
记录
解锁?
Oracal数据库中的一个表的一条
记录
被
锁定
,既不能修改也不能删除(只看到沙漏,等一个小时都是这样),删除表对象也不行,报错: ORA_00054:资源正忙,要求指定NOWAIT 解决方法: 1、当前session中commit、rollback都...
oracle中update锁
记录
,oracle查询
记录
时,对
记录
进行update
锁定
我们在使用oracle进行数据处理的时候,有时需要对查询出来的
记录
进行
锁定
,禁止其他进程对这些
记录
进行修改操作。oracle数据库提供了一种利用SELECT的FOR UPDATE子句实现的方法(可能sqlserver也有这个功能,但是没有...
access 接触子窗体
锁定
_access实现禁止显示窗口修改后台数据的方法
在实践工作中,我们都会利用access制作查询数据直接呈现给用户查看,以便实时查看动态数据流向。但是我们有时会忽略默认制作窗体或者查询,都处于不
锁定
状态,也...右键查询设计界面属性,点开属性--
记录
锁定
。我...
疑难问题
22,209
社区成员
121,731
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章