美文网首页
数据库事务的四大特性---原子性(undo log)

数据库事务的四大特性---原子性(undo log)

作者: wyn_做自己 | 来源:发表于2022-04-26 15:34 被阅读0次

    今日份鸡汤:为什么听过很多道理,却依然过不好这一生,因为,道理不会赋予你捷径,他只会让那些一直在一步一步往前走的人,过上比昨天更好的人生~

    定义:

    一个事务是一个不可分割的单位,是一个最小的操作单元,这些操作要么全成功,要么全失败,如果事务中的一个sql语句执行失败了,那么已经执行成功的sql语句要回滚,回滚到事务之前的状态。

    实现原理:

    主要基于undo log(日志),MySQL有很多日志,比如说二进制日志、错误日志、查询日志、慢查询日志等,innodb存储引擎提供了两种事务日志:redo log、undo logundo log就是实现原子性的原理。原子性体现在sql回滚上,如果执行sql报错了,会执行回滚,回滚到执行之前的状态。那么我们怎么回到回滚之前的状态呢?我们就需要把执行之前的一个状态记录下来,那么如果一旦这个sql语句发生错误之后,我们就可以回到我们之前的状态。类似于我们上线,如果这个版本在线上出问题了,那我们就会立刻把版本回退到之前没有问题的那个版本,他们原理一样,就是我一定要知道上一个正确的版本是什么,当这个事务对数据库进行修改的时候,innodb就会生成对应的undo log,他会记录这个sql执行的相关信息,如果sql执行失败,发生回滚,innodb就会根据undo log的内容去做相反的工作,比如说我执行了一个insert操作,那么回滚的时候呢,就会执行相反的操作,就是delete。如果我之前执行的是一个delete操作呢,那么回滚的时候,就会执行一个相反的insert操作。对于update我回滚的时候,会执行一个相反的update,把数据再改回去,那么这些操作的执行呢,都是基于这个undo log,要把这些sql语句的执行信息记录在日志里面,这样的话,在需要回滚的时候,我们就可以回滚了。

    相关文章

      网友评论

          本文标题:数据库事务的四大特性---原子性(undo log)

          本文链接:https://www.haomeiwen.com/subject/gantyrtx.html