日期:2014-05-17  浏览次数:20471 次

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楼是正确答案。