读书人

sql 数据 加锁 解锁解决思路

发布时间: 2013-12-05 22:27:44 作者: rapoo

sql 数据 加锁 解锁
当我编辑某行数据的时候
先执行 select 并锁定该行不能被查询 修改
更新完成 update 该行 解锁
怎么实现啊 sql 加锁 解锁 事务
[解决办法]
会话1:
begin tran

select * from tb with(xlock) where id = 1

update tb
set col = 1
where id = 1

commit tran


回话2:
select * from tb with(xlock) where id = 1
就会被锁住,查询不到东西
[解决办法]
编辑和真正的“更新”不应该放在一起吧,如果在编辑时锁住,然后你跑去泡妞了,那整个系统都给你堵住了,根据国外大牛paul的某本书,一般应该在真正更新的时候检查数据是否满足更新条件,然后更新,这个过程中加锁,加锁的行为不要等待用户响应
[解决办法]
提升事务隔离等级到serializable


set transaction isolation level serializable

[解决办法]
引用:
提升事务隔离等级到serializable

set transaction isolation level serializable

这个级别高了一点,重复读的级别就可以满足了。
[解决办法]
引用:
比如说:
一个考试系统
学生的答卷1 由老师A 在批阅
那么答卷1 就应该处于批阅状态 这时候应该得 锁住它吧不让查询或修改
等批阅完成 解锁


哦,那应该增加一个字段比如,status 为1表示在审批,而0表示解锁,在查询时:

select *
from tt
where status = 0

也就是只能查询解锁的
[解决办法]
楼主题目真拗口啊。

你要加锁因为是在编辑某行数据的时候,在编辑的时候,数据库会自动对表格,或者行数据加锁的,你不用再使用select ... with(xlock)再来加锁,多此一举。

7楼是正确答案。

读书人网 >SQL Server

热点推荐