什么是事务?
事务四大特性ACID
事务并发问题
事务隔离级别
事务隔离级别性能
串行化读 < 可重复读RR <读已提交RC<读未提交RU
事务隔离级别安全性
串行化读 >可重复读RR>读已提交RC>读未提交RU
一条Insert 语句的执行流程
insert into t values(1,'刘玄德');
事务底层原理
丢失更新问题
两个Session针对同一数据进行修改操作时会存在丢失更新,这个现象称之为丢失更新问题
如何解决丢失更新问题?
解决方案一:基于锁并发控制LBCC:查询总额的事务对读取数据行加锁,等读取数据结束再释放锁
解决方案二:基于版本并发控制MVCC:查询总额的事务不加锁,但是会读取事务开始时的快照数据
MVCC核心思想:读不加锁,读写不冲突
MVCC概念-什么是MVCC?事务MVCC实现原理
MVCC全称叫多版本并发控制,是RDBMS常用的一种并发控制方法,用来对数据库数据进行并发访问,实现事务。核心思想:读不加锁,读写不冲突。
实现原理:数据快照,不同事务访问数据快照中不同版本的数据
关键要素:Undo日志和ReadView
事务底层原理-Undo日志
在对数据修改时,InnoDB会产生一定量的Undo日志,如果事务执行失败Rollback了,则利用Undo日志回滚到历史版本
Undo日志还可以解决丢失更新问题
存储位置:系统表空间内的回滚段中
Undo日志分类
Insert Undo日志:是在Insert操作中产生的Undo日志
Update Undo日志:是Update或Delete 操作中产生的Undo日志
Undo 日志如何产生及回收
事务底层原理-什么是ReadView?
ReadView是张存储事务id的列表,主要包含当前系统中有哪些活跃的读写事务id,结合Undo日志的默认字段【trx id】来控制那个版本的Undo日志可被其他事务看见。
m ids:生成ReadView时,当前活跃的事务id列表
m low_limit id:事务id下限,当前活跃事务中最小的事务id
m_up_limit_id:事务id上限,生成ReadView时,应该分配给下一个事务的id值
m_creator_trx id:生成该ReadView的事务的事务id
什么时候生成ReadView?
开启事务之后,在第一次查询(select)时,生成ReadViewRC和RR隔离级别的差异本质是因为Readview的生成时机不同
如何判断可见性?