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

      • 两阶段封锁协议:第一个阶段只能拿取锁,不能释放锁;第二个阶段只是释放锁,不能拿取锁;
      • 共享锁和排他锁
    • 时间戳
    • 版本管理
  • 相关阅读:
    组合数据类型练习
    Python基础综合练习
    编译原理
    词法分析
    大数据概述
    C语言文法分析 <源函数> → <外部声明> | <源程序> <外部声明> <外部声明> → <函数定义> | <定义> <函数定义> → <类型标识符> <声明部分语句> <标识符类型> → <无类型> | <字符> | <整型> | <浮点型> <声明> <指针直接声明> | <直接
    熟悉常用的Linux操作
    附加进程调试
    关于SQL语句中的nolock
    用SVN完成分支的合并
  • 原文地址:https://www.cnblogs.com/glsy/p/13022289.html
Copyright © 2011-2022 走看看