首页 > 其他 > 详细

关于事务隔离级别

时间:2014-07-19 00:30:54      阅读:327      评论:0      收藏:0      [点我收藏+]

数据库事务常见的三种现象:

1 脏读(dirty read):未提交读。(A修改年龄为20,B读出20后,A回滚为18。)

   出现场景:大多数数据库默认的级别为提交读(SQLServer,Orcal),所以除非设置隔离级别为Read uncommitted,否则不会出现。

   解决方案:SET TRANSACTION ISOLATION LEVEL read committed

2 不可重复读:

  出现场景:

  执行事务A后,立马执行事物B,会出现事务A中出现的两次查询值不同。

--事务A

begin tran 
select * from  [HM_Student] where id=8
waitfor delay ‘00:00:05‘
select * from  [HM_Student] where id=8
commit tran 

--事务B

begin tran 
--delete [HM_Student]  where id=6
update [HM_Student] set age=333352 where id=8
waitfor delay ‘00:00:1‘
commit tran 

  解决方案:在事务前加:SET TRANSACTION ISOLATION LEVEL repeatable committed

3 幻读:与第2个相似,是一个事物中多次查询,其他事物对数据进行了删或者增而出现的情况。

  解决方案:SET TRANSACTION ISOLATION LEVEL serializable

 

总结:

隔离级别

脏读

不可重复读取

幻像

说明

未提交读(read uncommitted)

如果其他事务更新,不管是否提交,立即执行

提交读(read committed默认)

读取提交过的数据。如果其他事务更新没提交,则等待

可重复读(repeatable read)

查询期间,不允许其他事务update

可串行读(serializable)

查询期间,不允许其他事务insert或delete

 

关于事务隔离级别,布布扣,bubuko.com

关于事务隔离级别

原文:http://www.cnblogs.com/lpfsky/p/3853707.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!