码迷,mamicode.com
首页 > 数据库 > 详细

数据库事务隔离级别

时间:2015-10-10 12:01:46      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

数据库隔离级别是在在数据库操作中,为了有效保证并发读取数据的正确性提出的。

  隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读幻读第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁乐观锁来控制。

数据库的几种隔离级别:

  • READ UNCOMMITTED(读未提交数据):允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和幻读问题。
  • READ COMMITTED(读已提交数据):只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会出现不可重复读和幻读问题。
  • REPEATABLE READ(可重复读):确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题。
  • SERIALIZABLE(序列化):确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,可避免所有并发问题,但性能非常低。

Oracle支持两种事务隔离级别:

  READ COMMITTED(默认事务隔离级别),SERIALIZABLE

MySQL支持四种事务隔离级别,其中REPEATABLE READ为默认事务隔离级别。

通过上面可以知道多事务同时运行,如果不采用以上四种隔离机制,可能会产生多个并发问题,其中包括脏读、不可重复读和幻读,下面就解释下这几种并发问题:

  存在两个事物(T1,T2)同时运行

  • 脏读:T1读取了已经被T2修改但还未提交的字段,由于某种原因,T2事物回滚,则T1读取的内容是临时且无效的。
  • 不可重复读:T1读取一个字段,之后T2更新了该字段,T1在此读取该字段值发生了变化。
  • 幻读:T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后T1在此读取该表会多出几行。

数据库事务隔离级别

标签:

原文地址:http://www.cnblogs.com/ForeverLover/p/4866354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!