数据库事务隔离级别和锁的实现方式

原创 2016年05月31日 10:20:12

    当数据库中多个事务(Transaction)处理同一数据时,就会出现并发的问题,也就是需要解决数据库隔离性的问题(isolation)。

    数据库的事务操作主要会碰到以下几类问题:

    1.脏读:脏读指的是当前事务读到了其他事务未提交(uncommitted)的数据;

    2.不可重复读:本处的不可重复指的是在同一事务中,本事务未修改数据的情况下,两次读取的数据不一致;

    3.虚读:虚读类似于不可重复读,只不过读取的不是数据库中某一行数据,而是一类数据,因此其余事务即使只是插入新的数据,也会对本事务的读产生影响;

    4.第一类更新丢失:第一类更新丢失值得是,某一事物回滚(rollback)导致其他事务提交的数据被覆盖;

    5.第二类更新丢失:本质和不可更新读一样,出现于不知道其他事务更新操作的存在。


    知道了,以上的几个问题,我们来看看数据库事务的隔离级别是如何解决这些问题的:

    1.Read uncommitted 读未提交数据:能解决第一类丢失更新的问题,但不能解决脏读的问题

实现原理是,读数据时候不加锁,写数据时候加行级别的共享锁,提交时释放锁。行级别的共享锁,不会对读产生影响,但是可以防止两个同时的写操作。


    2.Read committed 读提交数据:能解决脏读的问题,但是不能解决不可重复读的问题:

实现原理是,事务读取数据(读到数据的时候)加行级共享锁,读完释放;事务写数据时候(写操作发生的瞬间)加行级独占锁,事务结束释放。由于事务写操作加上独占锁,因此事务写操作时,读操作也不能进行,因此,不能读到事务的未提交数据,避免了脏读的问题。但是由于,读操作的锁加在读上面,而不是加在事务之上,所以,在同一事务的两次读操作之间可以插入其他事务的写操作,所以可能发生不可重复读的问题。


    3.Repeated Read 可重复读:顾名思义,可以解决不可重复读的问题,但是不能解决虚读问题:

实现原理,和读提交数据不同的是,事务读取数据在读操作开始的瞬间就加上行级共享锁,而且在事务结束的时候才释放。分析方法和读提交数据类似,本处不再赘述。但是,由于加锁只是加在行上,所以,仍然可能发生虚读的问题。


    4. Serializable 串行化:可以解决以上所有的并发问题:

实现原理是,在读操作时,加表级共享锁,事务结束时释放;写操作时候,加表级独占锁,事务结束时释放。

数据库事务四种隔离级别

定义: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read com...
  • tolcf
  • tolcf
  • 2015年10月20日 22:40
  • 17463

理解事务的4种隔离级别

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。Read uncommitt...

数据库事务与隔离级别

1.数据库事务的概念: •事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败...

数据库事务四种隔离级别

定义: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read c...

数据库锁、隔离级别

并发控制主要是为了多线程操作时带来的资源读写问题。如果不加以空间可能会出现死锁,读脏数据、不可重复读、丢失更新等异常。 并发操作可以通过加锁的方式进行控制,锁又可分为乐观锁和悲观锁。     悲观锁(...

事务、数据库事务、事务隔离级别、锁的简单总结

一、数据库事务 1、事务是作为单个逻辑工作单元执行的一系列操作。可以是一条SQL语句也可以是多条SQL语句。 2、事务具有四个特性  原子性(Atomicity):事务中的全部操作在数据库中是不可分...
  • zootial
  • zootial
  • 2014年12月25日 14:21
  • 3615

数据库锁机制

1 前言 数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T...

数据库的锁机制

并发控制 在计算机科学,特别是程序设计、操作系统、多处理机和数据库等领域,并发控制(Concurrency control)是确保及时纠正由并发操作导致的错误的一种机制。 数据库管理系统(DBMS...
  • lexang1
  • lexang1
  • 2016年08月19日 10:53
  • 3919

Mysql数据库事务的隔离级别和锁的实现原理分析

mysql Innodb 解决各个不同事物隔离级别所产生问题的方法。

深入分析事务的隔离级别

本文详细介绍四种事务隔离级别,并通过举例的方式说明不同的级别能解决什么样的读现象。并且介绍了在关系型数据库中不同的隔离级别的实现原理。 文章转载于http://www.hollischuang....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库事务隔离级别和锁的实现方式
举报原因:
原因补充:

(最多只允许输入30个字)