数据库四种隔离策略实现多线程控制

 

数据库四种隔离策略实现多线程控制;

 

 

设计数据库的事物策略从事物的角度来实现多线程的处理,(不仅仅java,悲观锁等)

 

其实就是读和修改的顺序(还没完成就插入另一个),在多线程的情况下,出现数据问题

问题如下:

 

脏读(还没完成修改就读)

 

一个事物修改数据但是还没提交修改,另一个事物这个又用了这个数据

 

 

不可重复读(多次读中间又一次被修改了,导致和前面的结果不一样)

一个事物需要多次读取一个数据,在中途有另一个事物修改了此事物,导致数据不一样

 

 

幻读(读了之后有被另一个事物改了)

 

 

 

 

策略如下:

在一个事物中采取的策略,设置好后,每个事物都会用到这个策略

 

针对上述几种情况数据库提出了4种隔离策略(在一个事物中采取的策略)

       隔离级别               脏读(Dirty Read)          不可重复读(NonRepeatable Read)     幻读(Phantom Read) 

===========================================================================================

未提交读(Read uncommitted)        可能                            可能                       可能

已提交读(Read committed)          不可能                          可能                        可能

可重复读(Repeatable read)          不可能                          不可能                     可能

可串行化(Serializable )                不可能                          不可能                     不可能

 

 

 

 

未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

·提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)

·可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读

·串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

 

 

 

 

 

 

http://www.jb51.net/article/100183.htm

 

 

http://blog.chinaunix.net/uid-24111901-id-2627894.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值