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