type
status
category
date
slug
summary
tags
password
icon
📝 主旨内容
事务特性?
ACID
原子性,一致性,隔离性还有持久性
事务隔离级别?
RU RC RR S
读未提交,读已提交,可重复读,串行化
mysql默认隔离级别是RR,Oracle是RC
不同隔离级别都会引起哪些问题?
脏读
不可重复读
幻读
可以解决以上三种问题,但是开销太大,在实际项目中不常用
脏读:没有提交的数据被其他事务读到,解决方案:隔离级别,读已提交
不可重复读:多次读取结果,数据不一致,解决方案:隔离级别,可重复读
幻读:多次读取,数据量不一样(主要是 由插入操作引起的),解决方案:直接不让他插入
select for update 不让你插入
next-key-lock间隙锁
mysql是怎么解决不可重复读的(MVCC)
MVCC(多版本并发控制),多版本(一行数据的版本链)并发(场景)控制(读取的结果)
版本链:undolog和mysql针对每行数据的隐藏字段trx_id(事务id)和指向上一个版本的指针

不可重复读和幻读的解决思路:
不可重复读:第一次查询的时候生成read view ,允许其他事务修改,你可以改但是改完我不读,根据read view 指示到底应该读什么数据
幻读:根本上解决你,不允许你插入数据,没有插入新数据就不存在幻读问题,简单粗暴
- 作者:Guxi8086
- 链接:https://Guxi8086.com/article/1-32
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章
