【后端面经-数据库】MySQL的事务隔离级别简介

这篇具有很好参考价值的文章主要介绍了【后端面经-数据库】MySQL的事务隔离级别简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • 0. 事务的概念
  • 1. 三类问题
  • 2. 事务隔离级别
  • 3. 操作指令
  • 4. 总结
  • 5. 参考博文

0. 事务的概念

事务指的是一连串的集中操作指令,一个事务的执行必须执行完所有的动作才能算作执行结束。事务具有四个特点,简记作ACID

  • A-Atomicity: 原子性,事务的执行必须保证所有的动作都执行完毕;
  • C-Consistency: 一致性,事务的执行必须保证数据的一致性;
  • I-Isolation: 隔离性,事务的执行必须保证数据的隔离性;
  • D-Durability: 持久性,事务的执行必须保证数据的持久性。

而事务隔离级别则是在大型数据库多个事务执行的过程中,针对事务并行进行的机制设计,主要是围绕Isolation进行设计的。

1. 三类问题

  1. 脏读
    • 过程:
      • 事务A正在写某一行数据,未提交;
      • 事务B并行读取该行数据,用于操作;
      • 事务A撤销写操作,这是对于事务B来说,之前的读操作就是错误的。
    • 读事务读取了写事务未提交的数据,而造成错误读取。
    • 举例
      • 小明今天发工资,一开始在财务系统上查询是工资50000元,很高兴地准备买新电脑,但是这是财务正在敲数据的时候一时疏忽,实际上工资只有5000元,财务在审核数据准备提交的时候发现了这个错误并修改过来,小明很失望。
      • 这里的小明就是读事务,财务就是写事务
  2. 不可重复读
    • 过程:
      • 事务B读取的是数据库中的某一行数据,用于操作;
      • 事务A开始对这行数据进行写操作并完成,数据库的数据改变;
      • 事务B再次读该数据库的这一行数据,发现数据改变;
    • 读事务两次读同一行数据,但是两次读取的数据并不一致。
    • 举例
      • 小明和小红打赌,这个月工资是1k,两个人几乎同时发出查询请求,但是小明先读取到了原始数据是1k,而财务核对之后再次修改了工资为2k,小红在这之后才并发读取到工资是2k,两人认为读操作是并行的,同时进行,虽然知道这中间可能是财务进行了修改,但是两人都认为自己读取的才是最终数据,因此吵了起来。
  3. 幻读
    • 过程
      • 事务B读取数据库中的一批数据,用于操作;
      • 事务A添加了一行数据,并完成操作,数据库的数据改变;
      • 事务B再次读该数据库的数据,发现这一批数据改变;
    • 读事务两次读取同一行数据,但是两次读取的数据不一致。(这和不可重复读操作是一致的)。
    • 举例
      • 小明被领导要求,改动财务系统上的ID数据格式,从A格式全都转为B格式,小明读取数据库中的数据之后开始修改,这时候,财务发现新来了一位员工叫小红,于是把小红的记录添加在财务系统上,ID格式依然是A格式。小明工作完成之后给领导看,领导却发现有一个人的数据没有改过来,很是恼火,把小明批评了一番。
    • 幻读和不可重复读的区别
      • 幻读是针对同一批数据,不可重复读针对的是同一行数据

2. 事务隔离级别

  1. 读未提交(read uncommitted)
  • 一个事务在写某一行数据的时候,允许其他事务并行读取该行数据,但是不允许写该行数据;
  • 允许多个事务并行读取数据库中的数据,但是不允许并行写入某一行数据;
  • 可能会出现脏读:
  • 解决方案:排他锁
  1. 读已提交(read committed)

    • 一个事务在写某一行数据的时候,不允许其他事务读或者写该行数据;
    • 允许多个事务并行读取数据库的数据;
    • 可能都造成不可重复读
  2. 可重复读(repeatable read)

    • 一个事务在读数据的时候,其他事务不允许写,可以读。
    • 一个事务在写数据的时候,其他事务不可以读或者写。
    • 可能会造成幻读
    • MySQL默认的隔离级别。
  3. 串行化(serializable)

    • 一个事务一个事务串行执行,不允许任何事物并行;
    • 能够解决幻读不可重复读脏读的问题;
    • 成本高,一般不适用

3. 操作指令

  1. 查看当前的隔离级别
    SELECT @@tx_isolation;
    
  2. 设置隔离级别
     set  [glogal | session]  transaction isolation level 隔离级别名称;//方式1
     set tx_isolation='隔离级别名称';//方式2
    ``
    

4. 总结

对前期的事务隔离级别做一个表格梳理
文章来源地址https://www.toymoban.com/news/detail-482493.html

5. 参考博文

  1. 参考博文-1
  2. 参考博文-2

到了这里,关于【后端面经-数据库】MySQL的事务隔离级别简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库事务隔离级别

    读未提交、读已提交、可重复读、串行化 对事务中所有读写的数据加上读锁、写锁、范围锁。所以冲突的事务必须同步执行。 核心是只对事务中所有读写的数据加上读锁、写锁,不加范围锁。 相比于读已提交,由于对整个事务都加上了读锁,避免其他事务可以进行更新,进

    2024年02月08日
    浏览(31)
  • 数据库之事务隔离级别详解

    事务是一个原子操作,要么全部执行成功,要么全部执行失败。 事务的原子性确保一组逻辑操作,要么全部完成,要么完全不起作用。 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的。 事务的隔离性是指在并发执行

    2024年02月07日
    浏览(59)
  • MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别

    在正式开始之前,先简单回顾一下并发事务存在的问题以及事务的隔离级别等内容。 1.1 并发事务存在的问题 当两个或者两个以上事务同时开启去处理同一个表的数据时,可能会存在以下的问题: 丢失修改 脏读 不可重复读 幻读 丢失修改 丢失修改是指当两个或多个事务更新

    2024年02月02日
    浏览(44)
  • 数据库事务的四大特性与事务的隔离级别

    概要: 事务的四个特性:原子性、一致性、隔离性、持久性 事务不隔离带来的问题:更新丢失、脏读、不可重复读、虚读(幻读)。其中更新丢失就是并发写,这是一定不允许的,因此一定要解决更新丢失问题。 事务隔离的级别:读未提交(1000)、读已提交(1100)、可重

    2023年04月09日
    浏览(35)
  • 数据库事务的四种隔离级别

    事务 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单元,由一个有限的数据库操作序列构成。——维基百科 简而言之:一系列数据库操作语句组成事务。 数据库事务的隔离级别有四种: 读未提交(Read Uncommitted):事务中的修改可以被其他事务读取,

    2024年02月04日
    浏览(35)
  • 【数据库】事务的隔离级别以及实现原理

    经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢?本文就帮大家梳理一下。 事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

    2023年04月26日
    浏览(32)
  • 聊一聊数据库事务的那些事(隔离级别,传播行为)

      我们平时使用事务的时候,可能脑子里面想到和事务有关的知识点无非就是,ACID,事务隔离级别那一套,使用的事务也就是是通过注解的形式,或者手动开启事务。更细致一点的问题或许没有深究下去,比如事务的传播行为,注解形式和手动事务的区别等,今天我们就这几

    2024年02月07日
    浏览(42)
  • 数据库四种事务隔离级别的区别以及可能出现的问题

    当两个或多个事务读入同一数据并修改,会发生丢失修改问题,前一个事务修改的结果会被后一事务所做的修改覆盖。 当一个事务修改某个数据后,另一事务对该数据进行了读取,由于某种原因 前一事务撤销 了对该数据的修改,即将修改后的数据恢复原值,相当于没有执行

    2024年02月07日
    浏览(61)
  • 事务的四个特性、四个隔离级别以及数据库的常用锁

    事务的四个特性、四个隔离级别以及数据库的常用锁 四大特性 事务的四大特性,通常被称为ACID特性,是数据库管理系统(DBMS)确保事务处理的关键属性。这四大特性分别是: 原子性(Atomicity): 原子性要求事务是一个不可分割的单位,要么全部执行,要么全部不执行。如

    2024年02月04日
    浏览(34)
  • 【后端面经-数据库】MySQL的存储引擎简介

    目录 MySQL的存储引擎 0. 存储引擎的查看和修改 1. MyISAM 2. InnoDB 3. MEMORY 4. MERGE 5. 总结 6. 参考博客 mysql主要有四类存储引擎,目前主要使用InnoDB作为存储引擎。 查看当前数据库的默认存储引擎 查看当前数据库所支持的存储引擎 查看支持事务处理的存储引擎 设置新表的存储引擎

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包