MaoBisheng

Asp.Net(C#) & SQL & Oracle

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

并发问题

脏读:未确认的读取

非重复读:多次读取相同的数据行不一致(其他用户update)

幻象读:多次读取有不存在和新增的数据(其他用户insert或者delete)

隔离级别

隔离级别 脏读 非重复读 幻象 说明
未提交读
read uncommitted
不发出锁 如果其他事务更新,不管是否提交,立即执行
提交读(默认)
read committed
发出共享锁,保持到读取结束 读取提交过的数据,如果其他事务更新没提交,则等待
可重复读
repeatable read
发出共享锁,保持到事务结束 查询期间,不允许其他事务update
可串行读
serializeable
发出共享锁,保持到事务结束 查询期间,不允许其他事务insert或delete

共享锁:主要是为了共享读,如果存在事务(一个或者多个)拥有某数据的共享锁,不允许对锁定的数据进行update,从锁的角度讲,即不允许事务获取排他锁,要等到所有的共享锁都释放掉

排他锁:如果事务对数据已经拥有排他锁(只能有一个),其他的事务就不能对锁定的数据获取共享锁和排他锁,即排他锁与共享锁不能兼容

--------------------------------------------------------

NOLOCK:不发出锁,等同于READUNCOMMITTED

HOLDLOCK:发出共享锁,保持的事务结束,等同于SERIALIZABLE

XLOCK:发出排他锁,保持到事务结束

UPDLOCK:发出更新锁,保持到事务结束

READPAST:发出共享锁,但跳过锁定行,它不会被阻塞。适用条件:提交读的隔离锁,行级锁,select语句中。

posted on 2012-04-04 21:51  MaoBisheng  阅读(404)  评论(0编辑  收藏  举报