鹰潭房产网站建设,定襄网站建设,用wordpress赚钱,网站建设教程资源一、事务隔离级别
mysql支持四种事务隔离级别#xff1a;
读未提交#xff1a;一个事务可以读取到另一个事务还未提交的数据#xff1b;读已提交#xff1a;一个事务可以读取到另一个事务已经提交的数据#xff1b;可重复读#xff1a;同一个事务中#xff0c;无论读取…一、事务隔离级别
mysql支持四种事务隔离级别
读未提交一个事务可以读取到另一个事务还未提交的数据读已提交一个事务可以读取到另一个事务已经提交的数据可重复读同一个事务中无论读取多少次结果都和第一次读一样串行化多个事务之间读写和写写按照间隙锁互斥。
二、事务隔离级别实现原理
2.1 读未提交
直接读取最新的数据就好。
2.2 读已提交和可重复读
读已提交和可重复读都是通过MVCC进行实现的两者的区别在于ReadView生成方式不同。 MVCC的两个重要概念版本链和ReadView。
2.2.1 版本链
在InnoDB引擎中每行记录都会有两个隐藏列即trx_id和roll_pointer。
trx_id记录最近修改该行的事务idroll_pointer指针指向该行数据的上一个版本地址。
2.2.2 ReadView
ReadView有四个重要的字段
creator_trx_id创建该RV的事务idm_ids在创建该RV时当前数据库活跃事务的id列表即还没提交的事务id列表min_trx_id最小的活跃事务idmax_trx_id最大的活跃事务id1。
2.2.3 ReadView创建区别
在读已提交时一个事务中每次执行select都会创建一个ReadView。 在可重复读时一个事务中只在第一次执行select时创建一个ReadView。
2.2.4 ReadView的使用规则
在一个事务中执行select只能看到trx_id在min_trx_id和max_trx_id之间的事务。 读已提交和可重复读的底层原理均是MVCC但是由于两者创建ReadView的时机不同故出现了两种隔离表现。 2.3 串行化
使用间隙锁对读-写和写-写进行互斥。