深入理解MySQL事务的4种隔离级别

深入理解MySQL事务的4种隔离级别,第1张

深入理解MySQL事务的4种隔离级别 目录
  • 1 简介
  • 2 什么是数据库事务?
    • 2.1 事务的四大特性(ACID)
  • 3 并发事务会导致的问题
    • 3.1 本文会使用到的 SQL 语句
      • 3.1.1 示例表结构
      • 3.1.2 查询事务的默认隔离级别
      • 3.1.3 设置当前会话的事务隔离级别
  • 4 事务的4种隔离级别和示例演示
    • 4.1 读未提交
      • 4.2 读已提交
        • 4.3 可重复读
          • 4.4 串行化

          1 简介

          事务的4种隔离级别分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、 可重复读(Repeatable Read)和串行化(Serializable)。

          首先,在了解这4种隔离级别前就必须先要了解其前提,也就是事务,本文简单介绍一下关于事务。

          之后,我们也要理解这4种隔离级别产生的原因和场景展现以及4种隔离级别是如何解决问题的。

          2 什么是数据库事务?

          事务由一个有限的数据库 *** 作序列组成,这些 *** 作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

          例如一个银行转账场景:

          A转账B 100元,A的账号扣除100元,B的账号加上100块。假如中间出现任何异常,例如,在A的账号扣100元时,银行瘫痪,B的账号余额没有发生变化。这时候就需要事务来保证将A的钱还回去。

          2.1 事务的四大特性(ACID)
          • 原子性:事务作为一个整体被执行,包含在其中的对数据库的 *** 作要么全部都执行,要么都不执行。
          • 一致性:指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。
          • 隔离性:多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离。
          • 持久性:表示事务完成提交后,该事务对数据库所作的 *** 作更改,将持久地保存在数据库之中。

          3 并发事务会导致的问题
          • 脏读:事务 A 读取了事务 B 更新的数据,然后 B 进行回滚 *** 作,那么A读取的数据就是脏数据
          • 不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次夺取同一数据时,结果不一致。
          • 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

          欢迎分享,转载请注明来源:内存溢出

          原文地址: http://outofmemory.cn/sjk/2996972.html

          (0)
          打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
          上一篇 2022-09-26
          下一篇 2022-09-26

          发表评论

          登录后才能评论

          评论列表(0条)

          保存