zoukankan      html  css  js  c++  java
  • 事务

    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 实现事务隔离性的方案

      • 两阶段封锁协议:第一个阶段只能拿取锁,不能释放锁;第二个阶段只是释放锁,不能拿取锁;
      • 共享锁和排他锁
    • 时间戳
    • 版本管理
  • 相关阅读:
    剑指 Offer 60. n个骰子的点数
    剑指 Offer 59
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
    AndroidStudio中提示:Didn't find class "android.support.v7.widget.RecyclerView"
    SpringBoot中通过重写WebMvcConfigurer的addCorsMapping方法实现后台服务解决跨域问题
    Android中使用Room时怎样存储带list集合的对象
    Android中在使用Room时提示:Cannot figure out how to save this field into database. You can consider adding a type converter for
    Android中ListView的使用以及使用适配器设置数据源
  • 原文地址:https://www.cnblogs.com/glsy/p/13022289.html
Copyright © 2011-2022 走看看