mysql+nest+嵌套事务_事务 阅读总结

263e0cd60589

事务(Transaction)是数据库区别于文件系统的重要特性之一。 在文件系统中, 如果正在写文件, 但是操作系统突然崩溃了, 这个文件就很有可能被破坏。 当然, 有一些机制可以把文件恢复到某个时间点。 不过, 如果需要保证两个文件同步, 这些文件系统可能就显得无能为力了。 例如, 在需要更新两个文件时, 更新完一个文件后, 在更新完第二个文件之前系统重启了, 就会有两个不同步的文件。

这正是数据库系统引入事务的主要目的 :事务会把数据库从一种一致状态转换为另 一种一致状态。 在数据库提交工作时, 可以确保要么所有修改都已经保存了, 要么所有修改都不保存。

InnoDB存储引擎中的事务完全符合ACID的特性。 ACID是以下4个词的缩写:

原子性(atomicity)

一致性(consistency)

隔离性(isolation)

持久性(durability)

7.1 认识事务

7.1.1 概述

事务可由一条非常简单的SQL语句组成, 也可以由一组复杂的SQL语句组成。事务是访问并更新数据库中各种数据项的一个程序执行单元。 在事务中的操作, 要么都做修改, 要么都不做, 这就是事务的目的, 也是事务模型区别与文件系统的重要特征之一。

理论上说,事务有着极其严格的定义,它必须同时满足四个特性,即通常所说的事务的ACID特性。值得注意的是,虽然理论上定义了严格的事务要求,但是数据库厂商出于各种目的,并没有严格去满足事务的ACID标准。

原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,才算整个事务成功。事务中任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。

一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性还有其他的称呼,如并发控制(concurrency control)、可串行化(serializability)、锁(locking)等。事务的隔离性要求每个读写事务的对象对其他事务的操作对象能相互分离,即该事务提交前对其他事务都不可见,通常这使用锁住一个实体对象的子集,以此来提高事务之间并发度。

持久性, 事务一旦提交,其结果就是永久性的。即使发生宕机等故障,数据库也能将数据恢复。需要注意的是,只能从事务本身的角度来保证结果的永久性。

7.1.2  分类

从事务理论的角度来说,可以把事务分为以下几种类型:

1.扁平事务(Flat Transactions)

2.带有保存点的扁平事务(Flat Transactions with Savepoints)

3.链事务(Chained Transactions)

4.嵌套事务(Nested Transactions)

5.分布式事务(Distributed Transactions)

扁平事务(Flat Transaction)是事务类型中最简单的一种, 但在实际生产环境中,这可能是使用最为频繁的事务。 在扁平事务中, 所有操作都处于同一层次, 其由BEGIN WORK开始, 由COMMIT WORK或ROLLBACKWORK结束, 其间的操作是原子的,要么都执行, 要么都回滚。 因此扁平事务是应用程序成为原子操作的基本组成模块。

带有保存点的扁平事务 (Flat Transactions with Savepoint), 除了支持扁平事务支持的操作外, 允许在事务执行过程中回滚到同一事务中较早的一个状态。 这是因为某些事务可能在执行过程中出现的错误并不会导致所有的操作都无效, 放弃整个事务不合乎要求, 开销也太大。 保存点 (Savepoint) 用来通知系统应该记住事务当前的状态, 以便当之后发生错误时, 事务能回到保存点当时的状态。

对于扁平的事务来说, 其隐式地设置了一个保存点。 然而在整个事务中, 只有这一 个保存点, 因此, 回滚只能回滚到事务开始时的状态。 保存点用SAVEWORK函数来建立, 通知系统记录当前的处理状态。 当出现问题时, 保存点能用作内部的重启动点, 根据应用逻辑, 决定是回到最近一个保存点还是其他更早的保存点。

链事务(Chained Transaction)可视为保存点模式的一种变种。 带有保存点的扁平事务, 当发生系统崩溃时, 所有的保存点都将消失, 因为其保存点是易失的(volatile),而非持久的(persistent)。 这意味着当进行恢复时, 事务需要从开始处重新执行, 而不能从最近的一个保存点继续执行。

链事务的思想是: 在提交一个事务时, 释放不需要的数据对象, 将必要的处理上下文隐式地传给下一个要开始的事务。注意, 提交事务操作和开始下一个事务操作将合并为一个原子操作。这意味着下一个事务将看到上一个事务的结果, 就好像在一个事务中进行的一样。

263e0cd60589

链事务与带有保存点的扁平事务不同的是,带有保存点的扁平事务能回滚到任意正确的保存点。而链事务中的回滚仅限于当前事务,即只能恢复到最近一个的保存点。对于锁的处理,两者也不相同。链事务在执行COMMIT后即释放了当前事务所持有的锁, 而带有保存点的扁平事务不影响迄今为止所持有的锁。

嵌套事务(Nes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值