锁:排他锁,如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁;
MVCC:多版本并发控制,指维护一个数据的多个版本,使得读写操作没有冲突。主要通过以下实现;
1、隐藏字段
trx_id(事务id),记录每一次操作的事务id,是自增的
roll_pointer(回滚指针),指向上一个版本的事务记录地址
2、undo log
回滚日志,存在老版本数据
版本链,多个事务并行操作某一行记录,记录不同事务修改数据的版本,通过rool_pointer指针形成一个链表
3、readView 解决的是一个事务查询选择版本的问题
根据readView的匹配规则和当前的一些事务id判断该访问哪个版本的数据
不同的隔离级别快照读是不一样的,最终的访问的结果不一样
RC:每一次执行快照读时生产ReadView
RR:仅在事务中第一次执行快照读时生产ReadView,后续复用