事务

1 事务定义

事务是一个操作序列。这个操作序列要么全部执行,要么都没有执行。

2 事务的四个特性

事务的四个特性:原子性、一致性、隔离性、持久性

  • 原子性(Atomicity):事务即原子操作,要么全部执行成功,要么都未执行
  • 一致性(Consistency):事务执行前后产生的影响的是一致,即不会产生数据不一致的状态
  • 隔离性(Isolation):多个事务并发执行互不影响
  • 持久性(Durability):事务提交成功后,所产生的效果是持久的,即使服务崩溃,依旧可以恢复

严格保证隔离性可能会对系统性能产生较大的不利影响,一般都会对隔离性做出一些妥协;

3 事务的五种状态

事务处于的五种状态包含

  • 活动的(Active):初始状态,事务执行时处于该状态;
  • 部分提交的(Partially committed):事务最后一条语句执行后,事务提交前事务处于的状态;
  • 失败的(Failed):事务执行过程中出现异常,无法继续执行;
  • 中止的(Aborted):事务执行过程中因出现异常,导致无法执行,需要回滚已执行的操作,将系统恢复到事务执行前的状态;
  • 已提交的(Committed):事务执行完成后,提交事务后处于的状态

clipboard

图3.1 事务状态流转

1. 对于一些发送短信、邮件等可见的操作,因为用户可能已经看见,是无法执行回滚操作的,需要开发人员保证事务提交后再执行这些操作;

2. 事务回滚一般通过事务执行的逆向操作来完成,即可以理解为一个补偿事务,这个补偿事务执行的操作是事务的逆向操作;

4 事务的四种隔离级别

  • 未提交读(Uncommitted Read):一个事务允许读取其他事务还未提交的更改,会产生脏读
  • 已提交读(Committed Read):一个事务只允许读取其他事务已提交的更改,不会产生脏读,但不可重复读
  • 可重复读(Repeated Read):一个事务只允许读取其他事务已提交的更改,并且一个事务两次读取一个数据期间,其他事务不能更新该数据。不会产生脏读,可重复读,但因为只限制其他事务不可更改该事务读取的数据,其他事务还可以新插入数据,所以会产生幻读;
  • 串行化(Serialize):事务是一个一个串行执行的;

一般应用程序都会为了提高系统性能,选择较弱的事务隔离级别,可能中间会出现数据不一致的情况,但是只要保证数据最终一致性也是能接受的。

5 实现事务隔离性的方案

    • 两阶段封锁协议:第一个阶段只能拿取锁,不能释放锁;第二个阶段只是释放锁,不能拿取锁;
    • 共享锁和排他锁
  • 时间戳
  • 版本管理
posted @ 2020-05-31 23:07  锢浪熟阳  阅读(144)  评论(0编辑  收藏  举报