事务的隔离性分析

关键字:隔离性、幻读、间隙锁



1、并发的事务之间是互不干扰的,它们之间是隔离进行。这是事务的隔离性的体现。

2、事务的四种隔离级别&&三种问题:

(1)四种隔离级别:读未提交、读提交、可重复读、串行化

(2)三种问题: 脏读、不可重复读、幻读

详细分析:http://blog.sina.com.cn/s/blog_499740cb0100ugs7.html

3、对比分析:

(1)可重复读&&不可重复读:

  可重复读:指的是一个事务可以读取其他事务的更新,但是第一次读取到的数据,就算下次读取别的事务时,该事务已经对这个数据进行更新了,当前事务还是保持第一次读取的那个数据,也就可以抽象认为可以重复读到相同的数据。在这个隔离级别之下,只有当前事务提交之后,才能够读取到其他事务的提交。(冲突就发生在这个时刻)

  不可重复读:指的是数据不可重复读,别的事务一旦更新了这个数据,那么当前事务也需要更新这个数据,不可以再读到之前的那个数据。在同一个事务中,两次读取的数据不一致。

对比:

  ①可重复读时隔离级别;  不可重复读是一种现象;

  ②对于可重复读:当前事务未提交时,不可以读取到其他事务的commit,只能重复读取第一次读取的commit的内容;

   对于不可重复读:当前事务未提交时,可以读取到其他事务的commit,每次都是读取到别的事务最新提交的内容;

(2)Repeatable Read && 幻读:

  数据库的四种隔离级别在不同数据库中的实现是不同的,在mysql中,在实现Repeatable Read这个隔离级别的时候,已经解决了幻读的问题了。(虽然SQL标准中没有要求解决幻读,但是innodb中解决了)

怎样解决幻读?

  ①对于更新操作,都会加X锁,所以别的事务没办法进行更新操作,所以不会出现幻读;

  ②但是对于读操作:innodb默认不会加S锁,采用MVCC(等价于读锁)进行控制,同时添加了间隙锁(gap锁)。

  (“间隙锁”分析:https://www.cnblogs.com/bestvish/p/10518553.html

(3)innodb下的Repeatable Read和串行化的区别:

  前提:假设有两个并发事务A、B:

  ①RR隔离级别:

    a、事务A写,会加X锁,事务B只能读;

    b、事务A读,对于当前读的记录,通过MVCC进行控制,对当前记录的间隙加gap锁(等价于S锁)。此时事务B没办法写,只能读。

  ②串行化级别:不管是读还是写,都是串行化的,在某个事务读或者写的时候,别的事务是没办法读或者写的。

原文地址:https://www.cnblogs.com/axing-articles/p/11366890.html

时间: 2024-10-20 13:27:33

事务的隔离性分析的相关文章

[转载] 你真的明白事务的隔离性吗?

原文: http://mp.weixin.qq.com/s?__biz=MjM5MjIxNDA4NA==&mid=400262409&idx=1&sn=827bdcde075ef2f96c82a3f11fa422d4&scene=0&key=b410d3164f5f798ea52ee30c99dcb9c7e079c79659c2ffd9927976ab0093eb3003db7a80ff517fb25e7d1f4d95c602ad&ascene=0&

事务的隔离性理解

事务处理之父Jim Gray对事务隔离性的定义: Isolation: Concurrently executing transactions see the stored information as if they were running serially (one after another). 事务的隔离级别从低到高有:Read Uncommitted:最低的隔离级别,什么都不需要做,一个事务可以读到另一个事务未提交的结果.所有的并发事务问题都会发生.Read Committed:只有

Mysql学习之事务的隔离性

今天咱们说说事务,相信大家都知道事务的 ACID (Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性). 原子性:表示一个事务不可在分割,而且事务中的操作要么一起成功,要么一起失败: 一致性:表示事务前后数据的完整性必须保持一致: 持久性:表示事务一旦进行提交,那么数据的就改便会永久保存,即使数据库出现宕机也不会任何影响. 前面三个很好理解,那咱们再说说事务的隔离性,事务的隔离就是表示事务与事务之间不会相互干扰.但是多事务的情

MySQL:事务的隔离性

[参考文章]:数据库的事务特性及隔离级别 1. 事务的四大特性 1.1 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. 1.2 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态. 拿转账来说,假设用户A和用户B两者的钱加

事务四大特征:原子性,一致性,隔离性和持久性(ACID)

一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析. [sql] view plaincopyprint? // 创建数据库 create table account( idint primary key not null, namevarchar(40), moneydouble ); // 有两个人开户并存钱 insert into account valu

深入理解oracle的事务隔离性

在Oracle关系数据库中,我们先来看下面这个问题: A事务:select <cols> from T where id  > 10 and id < 10000; B事务:update T set id = 45000 where id = 4501 两个事务按下面的顺序执行: A事务:|--------------------------------|commit B事务:        |-------------|commit 也就是A事务先开始执行,过一段时间B事务再开始

&lt;事务隔离性&gt;

Overview 事务的隔离性是指在并发环境中,并发的事务是隔离的.一个事务的执行不能被其他事务干扰. 也即,不同的事务并发操作相同数据时,每个事务都有各自完整的数据空间. 隔离性 在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同,包括: 未授权读取,也称为读未提交(Read Uncommitted).该级别允许脏读取,其隔离级别最低.[关于脏读,幻读,blabla...请往下拉].如果一个事务正在处理某一数据,并对其进行了更新,但同时尚未完成事务,因此还未进行事务提交

spring事务的传播机制和隔离性

1.事务的传播机制: 指多个事务方法在相互调用时,事务如何在这些方法中传播. Spring支持7种事务传播行为: PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中.这是最常见的选择. PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行. PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常. PROPAGATION_REQUIRES_NEW 新建事务,

事务的四大属性ACID即事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability.。

事务的四大属性ACID即事务的原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability.. 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态. 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并