数据库的事务隔离(转)

  一、简述:
    在数据库操作中,为了效保证并发读取数据的正确性,提出的事务隔离级别。数据库事务的隔离级别4个,由低到高依次为:

      Read uncommitted(未授权读取、读未提交)

      Read committed(授权读取、读提交)

      Repeatable read(可重复读取)

      Serializable(序列化)

  不做事务隔离时容易出现的问题如下:

      1、更新丢失:两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。

      2、脏读: 一个事务读取到了另一个事务未提交的数据操作结果。

      3、不可重复读:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。包括以下情况:

       (1) 虚读:事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值。
       (2) 幻读:事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据。

  二、说明
    1. Read uncommitted(未授权读取、读未提交)
      如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据;
      避免了更新丢失,却可能出现脏读,也就是说事务B读取到了事务A未提交的数据;

      该隔离级别可以通过“排他写锁”实现。

    2. Read committed(授权读取、读提交)
      读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
      该隔离级别避免了脏读,但是却可能出现不可重复读。

      事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。
    

    3. Repeatable read(可重复读取)

      读取数据的事务将会禁止写事务(但允许读事务,写事务则禁止任何其他事务。
      避免了不可重复读取和脏读,但是时可能出现幻读。

      可通过“共享读锁”和“排他写锁”实现。

    4. Serializable(序列化)
      提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。
      该级别代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。

    

    总结:

      1. 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

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

      2. 大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle,MySQL的默认隔离级别就是Repeatable read。

转自;http://blog.csdn.net/tolcf/article/details/49283575

时间: 2024-10-12 01:10:40

数据库的事务隔离(转)的相关文章

数据库的事务隔离机制

事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度. 两个并发事务同时访问数据库表相同的行时,这些问题可以归结为5类: 3类数据读问题(脏读.不可重复读和幻象读) 2类数据更新问题(第一类丢失更新和第二类丢失更新). 1.幻读:事务T1读取一条指定where条件的语句,返回结果集.此时事务T2插入一行新记录,恰好满足T1的where条件.然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想. 2.不可重复读取:事务T1读取一行记录,紧接着事务T2修改了

数据库之事务隔离级别

事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态,对数据库的增删改查都是事务操作. 事务的4个特性(ACID): 原子性(Atomic):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分 一致性(Consistency):在事务处理执行之前和之后,数据是一致的 隔离性(Isolation):一个事务处理对另一个事务处理没有影响 持久性(Durabiliy):当事务处理成功执行到结束的时候,其效果在数据库中被永久纪录下来 对于同时运行的多个事务, 当这些事务访问数据库中相同的

数据库:自己理解的“数据库事务隔离级别”

转载请注明出处: jiq?钦's technical Blog - 季义钦 引言:在网上搜了很多关于事务的文章,感觉单独来看都很难看懂,所以综合自己的理解写一篇我自己能理解的关于关系型数据库事务的文章. 一.事务特征 我们都知道数据库事务具备ACID特性: Atomic(原子性):一个事务要么成功,要么失败 Consistency(一致性):一致性代表了底层数据存储的完整性.事务执行前后数据库都必须处于一个合法的状态.什么才是一个合法的状态? 比如满足数据库的唯一性约束.数据类型验证.引用完整性

数据库事务、事务隔离级别以及锁机制详解

以下主要以MySQL(InnoDB引擎)数据库为讨论背景,纯属个人学习总结,不对的地方还请指出! 什么是事务? 事务是作为一个逻辑单元执行的一系列操作,要么一起成功,要么一起失败.一个逻辑工作单元必须有四个属性,称为 ACID(原子性.致性.隔离性和持久性)属性,只有这样才能成为一个事务. 数据库事物的四大特性(ACID): 1)原子性:(Atomicity) 务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行. 2)一致性:(Consistency) 事务在完成时,必须使所有的

[MySQL]对于事务并发处理带来的问题,脏读、不可重复读、幻读的理解与数据库事务隔离级别 - 分析脏读 & 不可重复读 & 幻读

刚开始写博客.. 写的太low. 1.数据库的两种读,每种读读的数据版本不一样,所以也称为MVCC,即多版本并发控制 a) 快照读 select * from where xxx  这种形式的都是快照读. b) 当前读 update , insert ,delete ,select xx from xx for update ,  in share mode 都是当前读 当前读会等待,不会返回数据的历史版本 2.mvcc 的实现原理 mvcc是基于read view.活跃事务列表 做的,以后的文

理解MySql事务隔离机制、锁以及各种锁协议

一直以来对数据库的事务隔离机制的理解总是停留在表面,其内容也是看一遍忘一边.这两天决定从原理上理解它,整理成自己的知识.查阅资料的过程中发现好多零碎的概念如果串起来足够写一本书,所以在这里给自己梳理一个脉络,具体的内容参考引文或在网上搜一下.由于平时接触最多的是MySQL,所以文章中某些部分是MySQL特有的特性,请读者注意. 数据库并发操作会引发的问题: 多个事务同时访问数据库时候,会发生下列5类问题,包括3类数据读问题(脏读,不可重复读,幻读),2类数据更新问题(第一类丢失更新,第二类丢失更

事务隔离级别(二)

今天从MySQL数据库的角度说明锁机制和事务隔离级别之间的关系. MySQL数据库支持多种数据库引擎,但是最常用的只有MyISAM和InnoDB.由于MyISAM不支持事务,因此当我们在谈到事务隔离级别的时候,基本都是在说InnoDB.不过由于MyISAM上使用的表级锁对于理解InnoDB上的行级锁大有裨益,因此本文也会扼要介绍. 一.并发事务与事务隔离级别 相对于单线程的数据处理来说,并发事务能大大提高数据库资源的利用率,提高数据库系统的事务吞吐量,从而可以支持更多用户.但是并发也会带来一些问

事务隔离机制_悲观锁_乐观锁

5. 事务并发处理 a) 事务的特性:ACID i.Atomicity 原子性 ii.Consistency 一致性 iii.Isolation 隔离性 iiii.Durability 持久性 b) 事务并发时可能出现的问题 i. 第一类丢失更新(Lost Update) 时间 取款事务A 存款事务B T1 开始事务   T2   开始事务 T3 查询账户余额为1000元   T4   查询账户余额为1000元 T5   汇入100元把余额改为1100元 T6   提交事务 T7 取出100元把

MySQL数据库的事务管理

当前在开发ERP系统,使用到的数据库为Mysql.下面介绍下如何开启事务,以及事务隔离的机制 : 1. 检查当前数据库使用的存储引擎. show engines; 2. 修改前my.ini中的文件如下: 3. 修改my.ini的文件如下. 3.1 修改了默认的存储引擎 3.2 增加了mysql数据库的事务隔离级别, 如果不添加默认是REPEATABLE-READ. 4. 只需要重启mysql的服务即可. net stop mysql net start mysql 5. 再次查询show eng