社区
疑难问题
帖子详情
记录锁定问题
arclala
2003-03-18 08:45:01
在读取表的某一行记录时,锁定这一行,直到我更新了这行的记录后再解锁,不知怎样实现?
...全文
84
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
打赏
举报
回复
不要给自己找麻烦,使用一个字段作为标志,使用触发器做约束。
mysql跳过
锁定
记录
_MYSQL select时
锁定
记录
问题
一直有个疑问,使用 select * from dbo.A with(RowLock) WHRE a=1 这样的语句,系统是什么时候释放行锁呢??经过官方文档考证后,原来 RowLock在不使用组合的情况下是没有任何意义的,所谓“解铃还须系铃人~”With(RowLock,UpdLock) 这样的组合才成立,查询出来的数据使用RowLock来
锁定
,当数据被Update的时候,锁将被释放sqlser...
select时
锁定
记录
问题
在使用SQL时,大都会遇到这样的
问题
,你Update一条
记录
时,需要通过Select来检索出其值或条件,然后在通过这个值来执行修改操作。 但当以上操作放到多线程中并发处理时会出现
问题
:某线程select了一条
记录
但还没来得及update时,另一个线程仍然可能会进来select到同一条
记录
。一般解决办法就是使用锁和事物的联合机制:如: 1. 把select放在事务
MYSQL select时
锁定
记录
问题
在使用SQL时,大都会遇到这样的
问题
,你Update一条
记录
时,需要通过Select来检索出其值或条件,然后在通过这个值来执行修改操作。 但当以上操作放到多线程中并发处理时会出现
问题
:某线程select了一条
记录
但还没来得及update时,另一个线程仍然可能会进来select到同一条
记录
。 一般解决办法就是使用锁和事物的联合机制: 如: 1. 把select放在事务中, 否则select完成,
解决plsql
记录
被另外一个用户
锁定
问题
1、查看数据库锁,诊断锁的来源及类型:select object_id,session_id,locked_mode from v$locked_object;或者用以下命令: select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_id...
oracle
记录
被另一用户
锁定
,解决PLSQL
记录
被另一个用户锁住的
问题
https://blog.csdn.net/jarniyy/article/details/511332141、查看数据库锁,诊断锁的来源及类型:select object_id,session_id,locked_mode from v$locked_object;或者用以下命令:select b.owner,b.object_name,l.session_id,l.locked_mode fr...
疑难问题
22,298
社区成员
121,727
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章