MySQL事务 - 事务的基本概念与重要特性

1、事务概述


在MySQL中,事务是由存储引擎实现的,支持事务的存储引擎不多,比较典型的就是InnoDB存储引擎。

2、事务的四大特性


数据库事务具有ACID四大特性:

  • 原子性(atomicity)
    事务的原子性意味着事务中包含的程序作为数据库的逻辑工作单位,被视作一个“原子”。在这个“原子”内,对数据的改操作要么全部执行(事务提交),要么全部不执行(事务回滚)。如果把一个事务看作是一个程序,它要么完整的被执行,要么完全不执行。对于数据库层面而言,事务的操纵序列要么完全应用到数据库,要么完全不影响数据库。
  • 一致性(consistency)
    如果一个事务作为原子从一个一致的数据库状态开始独立地运行,则事务结束时数据库也必须再次是一致的。一致性是事务的最终目的,原子性、隔离性、持久性都是为了实现一致性。
  • 隔离性(isolation)
    事务的隔离性意味着并发的事务之间是相互隔离的。即一个事务的内部操作及正在操作的数据必须封锁起来,不被企图进行修改的其他事务看到。隔离性是DBMS针对并发事务间的冲突提供的安全保证,DBMS可以通过加锁的方式在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
    DBMS可以在并发执行的事务间提供不同级别的分离。分离的级别并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的DBMS需要更多的开销。
    隔离性包含四种隔离级别,分别是RU(读未提交)、RC(读已提交)、RR(可重复读)、SERIALIZABLE (串行化)。
  • 持久性(durability)
    持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS必须保证提供适当的冗余,来保证它对数据库数据的改变应该是永久性的,耐得住任何系统故障。一旦系统或介质发生故障时,需要对已提交事务的更新恢复,来确保已提交事务的更新不会丢失。所以,持久性主要在于DBMS的恢复性能。

事务的隔离性由MVCC和锁实现,而原子性,持久性和一致性主要是通过redo logundo logForce Log at Commit机制机制来完成的:
(1)MVCC用于数据库提供并发访问控制的并发控制技术。
(2)redo log用于在崩溃时恢复数据。
(3)undo log用于对事务的影响进行撤销,也可以用于多版本控制。
(4)Force Log at Commit机制保证事务提交后 redo log 日志都已经持久化。
当开启一个事务后,用户可以使用 COMMIT 来提交,也可以用 ROLLBACK 来回滚。当 COMMIT 或者 ROLLBACK 执行成功之后,数据一定是会被全部保存或者全部回滚到最初状态的,这也体现了事务的原子性。但是也会有很多的异常情况,比如说事务执行中途连接断开、或者是执行 COMMIT 或者 ROLLBACK 时发生错误、或 Server Crash(服务器崩溃)等,此时数据库会自动进行回滚或者重启之后进行恢复。

3、事务的流程

在这里插入图片描述
事务进行过程中,每次DML sql语句执行,都会记录undo log和redo log,然后更新数据形成脏页。然后redo log按照时间或者空间等条件进行落盘,undo log和脏页按照checkpoint进行落盘,落盘后相应的redo log就可以删除了。

此时,事务还未COMMIT,如果发生崩溃,则首先检查checkpoint记录,使用相应的redo log进行数据和undo log的恢复,然后查看undo log的状态发现事务尚未提交,然后就使用undo log进行事务回滚。

事务执行COMMIT操作时,会将本事务相关的所有redo log都进行落盘,只有所有redo log落盘成功,才算COMMIT成功。然后内存中的数据脏页继续按照checkpoint进行落盘。如果此时发生了崩溃,则只使用redo log恢复数据。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值