社区
疑难问题
帖子详情
记录锁定问题
arclala
2003-03-18 08:45:01
在读取表的某一行记录时,锁定这一行,直到我更新了这行的记录后再解锁,不知怎样实现?
...全文
58
6
打赏
收藏
记录锁定问题
在读取表的某一行记录时,锁定这一行,直到我更新了这行的记录后再解锁,不知怎样实现?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
不要给自己找麻烦,使用一个字段作为标志,使用触发器做约束。
【Salesforce】在Apex中解锁被
锁定
的
记录
或者
锁定
记录
在批准过程中,一条
记录
有可能根据设置被
锁定
。被
锁定
的
记录
无法更新任何数据,包括子对象的插入、更新等等。我们可以在Apex中实现将
记录
解锁的操作。 代码示例 ObjectName obj = [select id, name from ObjectName ...
access 接触子窗体
锁定
_access实现禁止显示窗口修改后台数据的方法
在实践工作中,我们都会利用access制作查询数据直接呈现给用户查看,以便实时查看动态数据流向。但是我们有时会忽略默认制作窗体或者查询,都处于不
锁定
状态,也...右键查询设计界面属性,点开属性--
记录
锁定
。我...
oracle中update锁
记录
,oracle查询
记录
时,对
记录
进行update
锁定
我们在使用oracle进行数据处理的时候,有时需要对查询出来的
记录
进行
锁定
,禁止其他进程对这些
记录
进行修改操作。oracle数据库提供了一种利用SELECT的FOR UPDATE子句实现的方法(可能sqlserver也有这个功能,但是没有...
PL/SQL
锁定
一行
记录
一、现象描述在开发中有时...二、解决方法步骤:1、首先使用PL/SQL、Navicat或其他客户端
锁定
数据库中某个表的待查询
记录
记录
并,只需要在查询语句后加 for update 即可select * from CARD_USER_INFO where card_id ...
记录
已被另一个用户
锁定
处理方法
通过 plsql连接数据,修改数据的,用到了...如未进行提交操作,造成
锁定
,再次编辑修改该条
记录
,出现提示“被另一个用户
锁定
”提示。 曾经看到过有说,经过一段时间后,Orcal会自动解锁,因此,过一段时间后...
疑难问题
22,302
社区成员
121,734
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章