面试官:请背诵MySQL事务的相关特性?

152 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 3 天,点击查看活动详情

为什么记不住?那是因为你没弄懂含义,没把知识点串起来,没找到背诵规律。

大家好,我是二毛。

面试的时候,一聊到 Mysql,毫无疑问就会聊到事务,紧接着就会有一套八股文组合拳袭来,那么面对这么多晦涩难记的知识点,我们该如何搞懂并记忆呢?

今天就来教大家如何有规律的进行背诵,并将知识点串起来。

事务的四大特性

直接记住 ACID 四个英文字母,那么你就能记住四大特性:

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)

那么这四个特性分别的含义是什么呢?其实从文字含义就能进行推测出来:

  • 原子性a

    • 同一个事务中的多条语句是不可分割的
  • 一致性c

    • 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账,转账前两个账户余额之和为2k,转账之后也应该是2K。
  • 隔离性i

    • 指多线程环境下,一个线程中的事务不能被其他线程中的事务打扰
  • 永久性d

  • 事务一旦提交,就应该被永久保存起来。

隔离级别

当你说出四大特性之后,面试官一般就会顺势问你事务的隔离性有多少个级别。

不要慌,也是有规律可背,可以总结为两读两可:

  • 未提交-RU(Read Uncommit)
  • 已提交-RC(Read Commit)
  • 重复读-RR(Read Repeat)
  • 串行化-SE(Serializable)

隔离级别从上到下依次上升,Mysql 默认就是在 RR 级别。

隔离级别的具体含义

  • 读未提交-RU

    • A事务没提交,B事务就能读到(但是不能修改)
  • 读已提交-RC

    • A事务提交,B事务才能读到
  • 可重复读-RR

    • A事务提交,B事务也不去读
  • 可串行化-SE

  • A事务未提交,B事务就别想动数据(读写都不能)

背诵规律:

A干嘛...,B干嘛...

并且这个规律有点逐步收紧的意思,对应的就是越来越串行化。

并发可能导致的问题

然后,面试官会问你多线程环境下访问 Mysql 可能会导致的问题,这个问题其实起到了承上启下的作用,看下去就知道了。

直接一把梭背下:

  • 丢失修改:前一个线程修改被后一个线程修改覆盖。

  • 脏读:一个线程中的事务读取到了另外一个线程中 未提交 的数据。

  • 不可重复读:指一个线程中的事务读取到了另外一个线程中 提交的update 的数据。

  • 幻读:一个线程中的事务读取到了另外一个线程中 提交的insert 的数据。

问题的出现的严重性从上到下依次递减。

背诵规律:

后三个问题都是,一个线程读到了...,另一个线程  未提交/ 提交的update / 提交的insert 数据。

隔离级别分别解决什么问题

那么隔离性级别实际上一一对应的解决了如上问题:

  • 读未提交-RU

    • A事务没提交,B事务就能读到(但是不能修改)
      • 解决丢失修改
  • 读已提交-RC

    • A事务提交,B事务才能读到
      • 解决脏读
  • 可重复读-RR

    • A事务已经提交,B事务也不去读
      • 解决不可重复读
  • 可串行化-SE

  • A事务未提交,B事务就别想动数据

  • 解决幻读

记住顺序,然后一一对应起来即可,

总结

以上就是我的一些总结,希望这些规律能帮助大家。

我是二毛,我们下期再见。