持续创作,加速成长!这是我参与「掘金日新计划 · 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事务就能读到(但是不能修改)
- 解决丢失修改
- A事务没提交,B事务就能读到(但是不能修改)
-
读已提交-RC
- A事务提交,B事务才能读到
- 解决脏读
- A事务提交,B事务才能读到
-
可重复读-RR
- A事务已经提交,B事务也不去读
- 解决不可重复读
- A事务已经提交,B事务也不去读
-
可串行化-SE
-
A事务未提交,B事务就别想动数据
-
解决幻读
记住顺序,然后一一对应起来即可,
总结
以上就是我的一些总结,希望这些规律能帮助大家。
我是二毛,我们下期再见。