事务原子性与持久性原理
<ul>
<li><a href="https://www.bilibili.com/video/BV1pA411H7Vd?p=3">https://www.bilibili.com/video/BV1pA411H7Vd?p=3</a></li>
<li>使用日志实现</li>
</ul>
<h2>事务原子性与持久怎么保持</h2>
<ul>
<li>ACID</li>
<li>A 原子性(Undo log)</li>
<li>C 一致性(原子性+持久性+隔离性)</li>
<li>I 隔离性(读写锁+MVCC)</li>
<li>D 持久性(Redo log)</li>
<li>记忆规则:原子性,持久性,隔离性,一致性</li>
</ul>
<h1>InnoDB两种日志</h1>
<ul>
<li>
<p>原子性实现原理:Undo log(撤消日志)</p>
</li>
<li>持久性实现原理:Redo log(重做日志)</li>
</ul>
<h2>Undo log(撤消日志)</h2>
<ul>
<li>实现事务原子性,在InnoDB存储引擎中实现多版本并发控制(MVCC)</li>
<li>在操作数据前将数据备份在Undo log中,修改数据现出错误,或者用户执行回滚操作,使用Undo log备份数据恢复到事务开始之前状态</li>
<li>
<p>Undo log是逻辑日志,可以理解为</p>
<ul>
<li>当删除一条记录时,Undo log中会记录一条对应的插入记录</li>
<li>当插入一条记录时,Undo log中会记录一条对应的插入记录</li>
<li>当更新一条记录时,Undo log中记录一条与更新相反操作的记录</li>
</ul>
</li>
<li>是逻辑日志,写在内存中,事务成功后,才会将数据写到磁盘中</li>
</ul>
<h2>快照与备份区别</h2>
<ul>
<li>快照:某一时刻数据状态</li>
<li>备份:数据全量的备份</li>
</ul>
<h2>Redo log(重做日志)</h2>
<ul>
<li>
<p>先存到内存中在再写到磁盘中</p>
</li>
<li>与撤消日志相反,是新数据的备份</li>
</ul>