并发问题
脏读:未确认的读取
非重复读:多次读取相同的数据行不一致(其他用户update)
幻象读:多次读取有不存在和新增的数据(其他用户insert或者delete)
隔离级别
隔离级别 | 脏读 | 非重复读 | 幻象 | 锁 | 说明 |
未提交读 read uncommitted | 是 | 是 | 是 | 不发出锁 | 如果其他事务更新,不管是否提交,立即执行 |
提交读(默认) read committed | 否 | 是 | 是 | 发出共享锁,保持到读取结束 | 读取提交过的数据,如果其他事务更新没提交,则等待 |
可重复读 repeatable read | 否 | 否 | 是 | 发出共享锁,保持到事务结束 | 查询期间,不允许其他事务update |
可串行读 serializeable | 否 | 否 | 否 | 发出共享锁,保持到事务结束 | 查询期间,不允许其他事务insert或delete |
锁
共享锁:主要是为了共享读,如果存在事务(一个或者多个)拥有某数据的共享锁,不允许对锁定的数据进行update,从锁的角度讲,即不允许事务获取排他锁,要等到所有的共享锁都释放掉
排他锁:如果事务对数据已经拥有排他锁(只能有一个),其他的事务就不能对锁定的数据获取共享锁和排他锁,即排他锁与共享锁不能兼容
--------------------------------------------------------
NOLOCK:不发出锁,等同于READUNCOMMITTED
HOLDLOCK:发出共享锁,保持的事务结束,等同于SERIALIZABLE
XLOCK:发出排他锁,保持到事务结束
UPDLOCK:发出更新锁,保持到事务结束
READPAST:发出共享锁,但跳过锁定行,它不会被阻塞。适用条件:提交读的隔离锁,行级锁,select语句中。
作者:MaoBisheng
出处:http://maobisheng.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://maobisheng.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。