1.事务特性:(ACID)
A tomicity:原子性—是指整个事务是一个整体,不可分割的最小工作单位。
C onsistency:一致性—指事务将数据从一种状态转换成下一种一致的状态。即事务执行前和事务执行后不能对数据库本身的其他约束和限制产生不一致的结果。比如导致唯一约束丢失等。
I solation:隔离性—要求每个事务的对象对其他事务的操作对象能互相分离,互不影响。即是事务提交前对其他事务都不可见。
D urability:持久性--数据一旦提交,结果就是永久性的。并不应为宕机等情况丢失。
2.事务的分类:
2.1扁平事务:(flat transaction)
- 所有操作处于同一层次的事务
- 是程序成为原子操作的基本组成模块
- 虽然简单,但是是在实际场景中使用最频繁的事务类型
2.2带保存点的扁平事务(flat transaction with save point)
- 在扁平事务的中间还带有保存点,让系统记住事务当前状态,以便发生错误的时候可以回到保存点当时的状态
- 扁平事务就是在结束位置隐藏的设有一个保存点
- 保存点事务的保存点是易失的而非持久的,如果系统发生异常,当恢复时事务需要从头执行
- 提交后不释放所持有的锁
2.3链式事务(chained transaction)
- 保存点扁平事务的一种变种
- 在提交一个事务时,释放不需要的数据对象,将必要的处理上下文隐式的传递给下一个要开始的事务。
- 提交事务和开始下一个事务将合并为一个原子操作
- 链式事务回滚只能回复最近一个保存点
- 链式事务提交将会释放所持有的锁
2.4嵌套事务(Nested Transaction)
- innodb 不支持
- 层次结构框架,由若干事务组成的一棵树,子树既可以是嵌套事务,也可以是子事务
- 由一个顶层事务控制着各个层次的事务
- 顶层以下的事务被称为子事务,子事务控制着每一个局部变换
- 叶子节点的事务都是扁平事务
- 处于根节点的是顶层事务,事务的前驱叫父事务,下一层是儿子事务
- 子事务可以回滚也可以提交,但是不会立马生效,除非父事务已经提交。因此整个事务只能在顶层事务提交后生效
- 树种任意一个事务回滚都会引起他的所有子事务回滚,故子事务只有 ACI 特性,不具有持久特性
- 不同的子事务可以持有不同的锁。但是嵌套事务上下层之间是可以选择是否传递自己持有的锁
2.5分布式事务(distributed transactions)
- 即分布式节点之间保证 ACID 特性的事务
- 允许多个独立的事务资源,参与到一个全局事务中
- 所有参与的事务要么都提交要么都回滚
3事务隔离级别:
隔离级别越低,事务请求的锁越少或保持锁的时间就越短
根据高人研究,SERIALIZABLE 级别的效率并不比 READ UNCOMMITED 低,甚至有可能更优。
3.1READ UNCOMMITED
- 被成为浏览访问,由于没有任何锁限制。所以脏读,幻读,丢失更新都存在。
3.2READ COMMITED
- 因为 innodb 在这个级别没有使用 grap lock ,所以幻读情况是存在的。
3.3REPETABLE READ
- innodb默认事务
- innodb 因为使用Next-key lock 避免了幻读,所以在这个级别已经实现了 SQL 规范的 SERIALIZABLE 事务隔离级别的要求
3.4SERIALIZABLE
- SQL SQL2 标准的默认事务级别
- 在这个级别 innodb 会在每句SELECT后面默认加上LOCK IN SHARE MODE开启共享锁
- 由于 innodb 在 REPEATABLE READ 级别就实现了避免幻读,所以 SERIALIZABLE 级别通常用在分布式事务情境下
4.innodb 的分布式事务
- 通过 XA 事务来实现分布式事务
- 使用时必须使用 SERIALIZABLE 事务隔离级别
- XA 事务允许不同数据库类型之间的分布式事务,比如 SqlServer 与 innodb 搭配使用
4.1XA 事务
- 由一个或者多个资源管理器、一个事务管理器以及一个应用程序组成
4.1.1资源管理器:
- 提供访问事务资源的方法
- 通常一个数据库就是一个资源管理器
4.1.2事务管理器:
- 协调参与全局事务的各个事务
- 需要和参与到全局事务的所有资源管理器通信
4.1.3应用程序:
- 定义事务的边界
- 指定全局事务中的操作
4.1.3XA使用的两段式提交流程:
- 所有全局事务节点开始准备,并告诉事务管理器准备提交了
- 事务管理器再告诉节点是回滚还是提交
- 如果任何一个节点不能提交,则全部回滚
网友评论