返回顶部
首页 > 资讯 > 数据库 >【MySQL】搞懂ACID原则和事务隔离级别
  • 496
分享到

【MySQL】搞懂ACID原则和事务隔离级别

【MySQL】搞懂ACID原则和事务隔离级别 2015-04-28 09:04:41 496人浏览 无得
摘要

宜未雨而绸缪,毋临渴而掘井 说说Mysql的事务 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 一个数据库事务通常包含对数据库进行读或写

【MySQL】搞懂ACID原则和事务隔离级别

宜未雨而绸缪,毋临渴而掘井

说说Mysql事务

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。

一个数据库事务通常包含对数据库进行读或写的一个操作序列。它的存在包含有以下两个目的:

  • 为数据库提供一个从失败恢复正常状态的方法,同时提供了数据库即使在异常状态下仍然能保持一致性的方法。
  • 当多个应用程序并发访问数据库时,可以在这些应用程序之间提供一个隔离的方法,以防止彼此的操作相互干扰。

当然并不是所有的数据库都支持事务,事务一般有四个属性:原子性、一致性、隔离性、持久性。简称:ACID原则。接下来我们举例逐个分析:

  • 原子性:顾名思义原子就不可在分的,事务作为一个整体,对数据库的执行要么成功,要么失败。
  • 一致性:事务从一个一致状态转换到另一个一致状态。
  • 隔离性:多个事务并发执行,事务之间的执行互不干扰。
  • 持久性:一旦一个事务提交,它对数据库的操作将永久保存到数据库当中。

举例:

我们用一个转账的案例结合每个性质分析,例如:账户A向账户B转账,主要分为一下几个步骤:

  1. 从A账号中把余额读出来(500)。
  2. 对A账号做减法操作(500-100)。
  3. 把结果写回A账号中(400)。
  4. 从B账号中把余额读出来(500)。
  5. 对B账号做加法操作(500+100)。
  6. 把结果写回B账号中(600)。

原子性

保证6个步骤要么全部执行,要么全部不执行,如果失败了就把事务回滚到转账的初始状态。比如:在执行到第五步的之后,账户B突然注销了找不到了,此时账户A的钱也扣了,就必须事务回滚到原来各自的状态也就是A的余额500。

一致性

在转账之前A和B的账户共有500+500=1000,而转账成功之后,A和B的账户是400+600=1000,就是数据的状态在执行该事务操作之后从一个状态改变到了另外一个状态

隔离性

在A给B转账过程中,只要事务没有提交,A和B的账户余额不会存在变化。但是此时账户C也在向账户B转账,最终两个事务提交之后账户B的余额应该是账户A转账的金额加上账户C转账的金额。也就是说多个事务之间不会相互影响,至于C给B转账的时候获取B的余额是已经加了A给B转账的余额还是没加,这个和事务的隔离级别有关系。

持久性

一旦转账成功(事务提交),两个账户的里面的钱就会真的发生变化(会把数据写入数据库做持久化保存)!

事务的隔离级别

  • Read-uncommitted(读未提交):最低级别,以上情况均无法保证。
  • Read-committed(读已提交):可避免脏读情况发生
  • Repeatable-read(可重复读,默认):可避免脏读、不可重复读情况的发生不可以避免虚读
  • Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行,不仅有read、write还有range lock范围锁(没有where锁全表,有where锁where范围);对一张表的所有增删改操作必须顺序执行,性能最差)
隔离级别 脏读 不可重复读 幻读
Read-uncommitted
Read-committed ×
Repeatable-read × ×
Serializable × × ×

隔离级别详解

  • Read uncommitted

作用:所有事务都可以看到其他未提交事务的执行结果

例子:

又到月底了,小明的老婆要准备给小明发生活费了,小明的老婆给小明打了500块,但该事务并没有提交,而此时小明正好在查余额,发现是550块,高兴的差点蹦了起来.天有不测风云,突然小明的老婆发现多打了50块,于是回滚事务,修改金额,然后将事务提交,最后小明空欢喜异常。

  • Read committed

作用:一个事务只能看见已经提交事务所做的改变

例子:

某个夜黑风高的夜晚,小明丰富的夜生活开始了,小明拿着工资卡去消费,pos机读取卡的信息的时候有500,而此时小红也正好在网上转账,把小明工资卡的500元转到另一账户,并小明之前提交了事务,当小明扣款时,系统检查到小明的工资卡已经没有钱,扣款失败,小明十分纳闷,明明卡里有钱,为什么会说余额不足,出现上述情况,即我们所说的不可重复读,两个并发的事务,“事务1:小明消费”、“事务2:小红网上转账”,事务1事先读取了数据,事务2紧接了更新了数据,并提交了事务,而事务1再次读取该数据时,数据已经发生了改变,当隔离级别设置为Read committed时,避免了脏读,但是可能会造成不可重复读

  • Repeatable read

    • 备注
      1. mysql的默认隔离级别
      2. 从原理上看,可重复读是靠mvcC(多版本并发控制)保证的,该模式下,保证事务只能读取到当前事务开启之前已经提交的事务的修改以及当前事务本身对数据的修改
    • 区别
      1. 不可重复读的重点是修改,比如多次读取一条记录发现其中某些列的值被修改(但mysql由于MVCC机制并不会有),
      2. 幻读的重点在于新增或者删除,比如多次范围读取发现记录增多或减少了。

作用:当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,发现和之前不一样。

例子:

小红最近发现小明总是很晚回家并且经常不接电话,于是小红开始查小明当月信用卡的总消费金额,消费金额为50,而小明此时正好在收银台买单,消费1000元,即新增了一条1000元的消费记录,并提交了事务,随后小红将小明当月信用卡消费的明细打印了出来,却发现消费总额为1050元,小红很诧异,以为出现了幻觉

  • Serializable(串行)

作用:最高级别,防止上述3种情况,事务串行执行,慎用这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而避免了脏读,可重复读,幻读。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争,并发性能最差,在分布式事务中可能会被用到。

参考文献:
Http://www.hollischuang.com/arcHives/898

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL】搞懂ACID原则和事务隔离级别

本文链接: https://lsjlt.com/news/6574.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【MySQL】搞懂ACID原则和事务隔离级别
    宜未雨而绸缪,毋临渴而掘井 说说MySQL的事务 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 一个数据库事务通常包含对数据库进行读或写...
    99+
    2015-04-28
    【MySQL】搞懂ACID原则和事务隔离级别
  • 数据库ACID原则和事务隔离级别
    数据库ACID原则A:原子性,AtomicityC:一致性,ConsistencyI:隔离性,IsolationD:持久性,Durability在mysql中的innodb引擎,原子性,一致性,隔离性通过r...
    99+
    2024-04-02
  • 数据库事务:ACID 和隔离级别
    一、什么是事务 事务是将多条 SQL 作为一个整体进行数据操作。这样能确保全部执行成功或全部执行失败,不改变任何数据。根据业务需求选择不同的存储引擎。对于那些不需要事务的查询类应用,选择非事务型的存储引擎能得到更高的性能,LOCK TABL...
    99+
    2016-06-16
    数据库事务:ACID 和隔离级别
  • 事务隔离性和隔离级别
    隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离 事务的隔离级别有哪些? 一、概念 Read uncommitted(读未提交) Read ...
    99+
    2021-04-27
    事务隔离性和隔离级别
  • MySQL事务隔离级别
      四类隔离级别    SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。  Read Unc...
    99+
    2024-04-02
  • 【MySQL】事务及其隔离性/隔离级别
    需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云-->阿里云-->华为云 show variables like 'autocommit';+---------------+-------+| Variable_name...
    99+
    2023-09-01
    mysql 数据库
  • MySQL 事务的隔离级别
    1. 事务的ACID 事务的ACID是指事务拥有的4个特性的首字母组合:atomicity(原子性), consistency(一致性), isolation(隔离性)和durability(持久性)。 ①atomicity(原子...
    99+
    2019-01-27
    MySQL 事务的隔离级别
  • MySQL的事务隔离级别
    目录数据库事务的四大特性⑴ 原子性(Atomicity)⑵ 一致性(Consistency)⑶ 隔离性(Isolation)⑷ 持久性(Durability)SQL的4种隔离级别Read Uncommitted(读取未提交内容)R...
    99+
    2021-07-07
    MySQL的事务隔离级别
  • mysql事务隔离的级别
    这篇文章主要介绍“mysql事务隔离的级别”,在日常操作中,相信很多人在mysql事务隔离的级别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql事务隔离的级别”的疑惑...
    99+
    2024-04-02
  • mysql事务和隔离级别底层原理浅析
    目录前言一、事务底层原理浅析原子性:持久性隔离性:一致性:二、隔离级别底层原理浅析三、总结前言 首先回顾一下什么是事务,事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一...
    99+
    2024-04-02
  • MySQL ACID四种隔离级别是什么
    本篇内容主要讲解“MySQL ACID四种隔离级别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL ACID四种隔离级别是什么”吧! 下面举一个...
    99+
    2024-04-02
  • mysql事务和隔离级别是什么?
    事务和隔离级别事务的概念:事务是把对数据库的一系列操作都看做一个整体,要么全部成功,要么全部失败,利用事务我们可以保证数据库的完整性,事务具有原子性。隔离级别:隔离级别定义了事务与事务之间的隔离距离。脏读(...
    99+
    2024-04-02
  • Mysql之事务提交和隔离级别
    Mysql之事务提交和隔离级别一、事务是什么事务简言之就是一组SQL执行要么全部成功,要么全部失败。MYSQL的事务在存储引擎层实现。1、事务都有ACID特性:原子性(Atomicity):一个事务必须被视...
    99+
    2024-04-02
  • 事务隔离级别
    事务隔离是数据库处理的基础之一,Isolation是ACID中I的缩写,当多个事务同时进行更改和执行查询时,隔离级别是微调性能和可靠性、一致性和结果再现性之间的平衡的设置 MySQL支持以下几个隔离级别 ...
    99+
    2024-04-02
  • MySQL锁与事务隔离级别
    1、概述 (1)锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、IO等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据...
    99+
    2021-12-05
    MySQL锁与事务隔离级别
  • MySQL基础——事务隔离级别
    事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID) ①:原子性(Autmic):事务在执行性,要做到“要...
    99+
    2024-04-02
  • MySQL事务隔离级别详解
    一、什么是事务? 事务是逻辑上的一组操作,要么全执行,要么全不执行。 事务最经典栗子也经常被拿出来的栗子就是银行转账了。比如小明要给小红转账1000元,这个转账会涉及到两个关键操作:将小明的余额减1000元,将小红的余额减1000元。万一这...
    99+
    2023-08-30
    mysql
  • mysql事务隔离级别详情
    serializable 串行化(无问题) 事务必须以顺序的方式执行,前一个事务提交之前后面的事务无法进行提交,最安全,但是不能并发操作,导致效率低下. repeatab re...
    99+
    2024-04-02
  • Mysql事务隔离级别原理实例解析
    引言 大家在面试中一定碰到过 说说事务的隔离级别吧? 老实说,事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!因为他们对可重复读(Repeata...
    99+
    2022-05-29
    Mysql 事务 隔离 级别
  • 简单易懂理解事务的隔离级别
    在讲事务的隔离级别,我们先得回忆一下事务的隔离性 事务的隔离性是在当多个用户并发访问数据库时,比如说操作同一张表时,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间需要相互隔离。即要达到这样的一种效果:对于任意的两...
    99+
    2017-04-06
    简单易懂理解事务的隔离级别
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作