(二)深入理解MySql锁与事务隔离级别

1.MVCC机制详解

MVCC主要是为了提高高并发的读写性能,不用加锁就能让多个事务并发读写
在这里插入图片描述
对于事务id为12的操作,先查询select * from account(创建了查询快照,记录执行sql这一刻最大的已提交事务id 快照点已提交最大事务id ) ,对于事务13的操作,先删除id=1的记录,然后更新id=2的记录,再提交.对于删除操作,mysql底层会记录好被删除的数据行的删除事务id,对于更新操作mysql 底层会新增一行相同数据并记录好对应的创建事务id

在id为12的事务里执行查询操作mysql 底层会带上过滤条件,创建事务id<=max(当事务id 为12 ,快照点已提交最大事务id ,删除事务id >max[当前事务id为12 ,快照点已提交最大事务id])

注意:begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB表的语句,事务才真正启动,才会向mysql申请事务id,mysql 内部是严格按照事务的启动顺序来分配事务id的

猜你喜欢

转载自blog.csdn.net/qq_43565087/article/details/109276110