当不同事务对同一记录做修改时,会导致该行记录的undolog形成一个线性表
现在有了事务4,那么事务4读取的是哪个版本的数据?一定有对应规则,规则是什么=》隔离级别。
隔离性:
readview:事务快照读时,产生的视图
假如4个事务都操作相同的记录,事务2能读到事务4修改的记录吗? 能
事务2下的开启改为开启并快照读
判断原则,可见性算法(判断为可提交则可读)
为什么RR,可重复读看不到?
和RC相比,readview生成的时机不同,因为就是把最近事务操作id和readview的值进行对比
trx_list 变成了 1234了,4在里面了,判断为事务4未提交。
RR级别下,事务2永远读的是第一次的快照吗? 不是
如果事务2 进行update操作(当前读),快照会更新(会找更新就会引起RC级别的幻读)
RR要解决幻读,需要借助间隙锁(锁一段范围),如select... for update,其他事务插入更新就会阻塞。(那自己不是还可以更新 readview)
总结:readview会更新就可能会幻读。
持久性:
先写日志,再写数据 :比如我们更一条数据
数据从磁盘找到这条数据(很慢,随机读),加载到内存,更新后写入磁盘
万一写入磁盘错误或者数据丢失,怎么恢复呢?
日志是以追加的形式进行读写(顺序读写)的,如果我们先把这条日志写入redolog,就不怕数据丢失了
二阶段提交: