<article class=“article fmt article-content”><h2>事务的实现</h2><p>MySQL在进行事务处理的时候采纳了日志后行的形式来保障事务可疾速和长久运行,在写数据之前,先写日志,开始事务时,会记录该事务的一个LSN日志序列号;当执行事务时,会往Innodb_log_buffer日志缓冲区中插入事务日志(redo log);当事务提交时,会将日志缓冲区里的事务刷入磁盘,由innodb_flush_log_at_trx_commit参数进行管制何时刷入磁盘</p><ul><li>0 <strong>提早写</strong> 事务提交时不会将redo log buffer中日志写入到os buffer中,而是每秒写入os buffer并调用fsync()写入到redo log file中,如果零碎解体,将失落1秒的数据,性能最好,然而安全性最差</li><li>1 <strong>实时写,实时刷</strong> 事务每次提交都会将redo log buffer中的日志写入到os buffer并调用fsync()刷到redo log file中,尽管不会失落数据,然而每次都写入磁盘,IO性能较差</li><li>2 <strong>实时写,提早刷</strong> 每次提交将redo log buffer中的日志写入os buffer,然而每秒调用一次fsync()将os buffer中的日志写入到redo log file中</li></ul><p><!– more –></p><p>除了记录事务日志redo log外,还会记录回滚日志undo log,在进行数据批改时,因为某种原因失败了,须要进行回滚操作,能够利用undo log来将数据回滚到批改之前的样子</p><blockquote>https://zhhll.icu/2022/数据库/关系型数据库/MySQL/进阶/Innodb/2.事务的实现/</blockquote><p>本文由mdnice多平台公布</p></article>