什么是事务
事务(Transaction) 是并发控制的基本单位。
所谓的事务,它是一个操作序列,这些操作要么都 执行,要么都不执行,它是一个不可分割的工作单位。
事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
事务的四大特性
四大特性简称为:ACID,分别是原子性、一致性、隔离性和持久性。
原子性
原子性指的是整个数据库的事务是一个不可分割的工作单位,每一个都应该是一个原子操作。
当我们执行一个事务的时候,如果一系列的操作中,有一个操作失败了,那么,需要将这一个事务中的所有操作恢复到执行事务之前的状态,这就是事务的原子性。
一致性
一致性是指事务将数据库从一种状态转变为下一种一致性的状态,也就是说在事务执行前后,这两种状态应该是一样的,也就是数据库的完整性约束不会被破坏。
隔离性
事务和事务之间他们是相互分离的,也就是互不影响的,这就是事务的隔离性。
持久性
事务的持久性是指事务一旦提交,就是永久的了,就是发生问题,数据库也是可以恢复的。因此,持久性保证事务的高可靠性。
事务的类型
事务类型一般分为:扁平事务、带有保存点的扁平事务、链事务、嵌套事务、分布式事务。
扁平事务
扁平事务是最简单的一种,在实际开发中也是使用的最多的一种事务,在这种事务中,所有操作都处于同一层次。
扁平事务的主要缺点是不能提交或回滚事务的某一部分,或者分几个独立的步骤去提交。
带有保存点的扁平事务
这种事务除了支持扁平事务支持的操作外,这种事务跟扁平事务最大的区别就是允许在事务执行过程中回滚到同一事务中较早的一个状态,这是因为可能某些事务在执行过程中出现的错误并不会对所有的操作都无效,放弃整个事务不合乎要求,开销也太大。保存点用来通知系统应该记住事务当前的状态,以便以后发生错误时,事务能回到该状态。
链事务
链事务:在提交一个事务时,释放不需要的数据对象,将必要的处理上下文隐式的传给下一个要开始的事务。需要注意,提交事务操作和下一个事务操作将合并为一个原子操作,就是下一个事务可以看到上一个事务的结果。
链事务,就是指回滚时,只能恢复到最近一个保存点;而带有保存点的扁平事务则可以回滚到任意正确的保存点。
嵌套事务
在事务中再嵌套事务,这种结构有点像一颗横着的树的结构,位于根节点的事务称为顶层事务。事务的前驱称为父事务,其它事务称为子事务。事务的前驱称为父事务,事务的下一层称为子事务。
子事务既可以提交也可以回滚,但是它的提交操作并不马上生效,除非由其父事务提交。因此就可以确定,任何子事务都在顶层事务提交后才真正的被提交了。同理,任意一个事务的回滚都会引起它的所有子事务一同回滚。
分布式事务
分布式事务通常是指在一个分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点。
在不同的物理地址,通过网络访问,执行不同的事务,这就是分布式事务。