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

原创 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
  • 14085

数据库事务隔离级别和锁实现机制

一 数据库事务处理中出现的数据不一致的情况  在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有四种问题,归结如下: 1、丢失更新   如果两个事务...

深入分析事务的隔离级别

本文详细介绍四种事务隔离级别,并通过举例的方式说明不同的级别能解决什么样的读现象。并且介绍了在关系型数据库中不同的隔离级别的实现原理。 文章转载于http://www.hollischuang....

数据库悲观锁和乐观锁

一下是转载的oracle和Mysql两种数据库悲观锁和乐观锁机制及乐观锁实现方式: 一、Oracle Oracle数据库悲观锁与乐观锁是本文我们主要要介绍的内容。有时候为了得到最大的性能,一般数据...

数据库锁 sql 数据库大并发操作 数据库原子操作

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

数据库锁机制

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

MySQL详解--锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数...

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

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

缓存技术概述

java缓存技术一 缓存是当今各种软件或者硬件系统中不可缺少的技术之一,所以对每个程序员来说都显得异常重要。 在讨论缓存功能之前,我们首先来了解一下缓存这个东西本身。 根据经验把...

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

一、数据库事务 1、事务是作为单个逻辑工作单元执行的一系列操作。可以是一条SQL语句也可以是多条SQL语句。 2、事务具有四个特性  原子性(Atomicity):事务中的全部操作在数据库中是不可分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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