请注意,本文编写于 561 天前,最后修改于 561 天前,其中某些信息可能已经过时。
目录
事务的四大特性
事务并发存在的问题
事物的隔离级别
读未提交
读已提交
可重复读
串行化
READVIEW
事务的四大特性
- 原子性: 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部都执行,要么都不执行。
- 一致性: 指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。
- 隔离性: 多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离。。
- 持久性: 表示事务完成提交后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。
事务并发存在的问题
脏读,幻读,不可重复读
事物的隔离级别
读未提交
隔离级别最低
读已提交
解决脏读,存在不可重复读
可重复读
存在幻读
串行化
最严格,读和写都不许并行
READVIEW
RR隔离级别下,仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。 而RR 是可
重复读,在一个事务中,执行两次相同的select语句,查询到的结果是一样的。
在MySQL中,除了RR(Repeatable Read)隔离级别外,其他隔离级别下的ReadView的生成和销毁方式略有不同。
-
Read Uncommitted(读未提交)隔离级别:
- ReadView的生成:在Read Uncommitted隔离级别下,事务不会创建ReadView,它会直接读取其他事务尚未提交的数据。因此,Read Uncommitted级别没有数据一致性的保证,可能读取到未提交的脏数据。
- ReadView的销毁:由于没有ReadView的创建,也就没有销毁的过程。
-
Read Committed(读提交)隔离级别:
- ReadView的生成:在Read Committed隔离级别下,每个SQL语句执行时都会生成一个ReadView,用于读取当前已提交的数据版本。每个SQL语句的执行都会创建一个瞬时的ReadView,用于保证该语句读取的数据是已提交的。
- ReadView的销毁:在每个SQL语句执行结束后,相应的ReadView会被销毁,不会保留到事务结束。
-
Serializable(可串行化)隔离级别:
- ReadView的生成:在Serializable隔离级别下,事务开始时会创建一个ReadView,用于读取一致性视图。这个ReadView会保留到整个事务结束。
- ReadView的销毁:在事务结束时,相应的ReadView会被销毁。
链接:https://juejin.cn/post/6844904115353436174
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!