1. 事务概念
      1. 什么是事务:事务是指单个逻辑单元的一系列业务操作,要嘛全部成功,要嘛全部失败
      2. 本地事务(区别于分布式事务)
        1. 概念:本地事务是指开启事务/执行sql语句/提交事务或事务回滚
        2. 特征:
          1. 一次事务只连接一个支持事务的数据库(一般来说都是关系型数据库)
          2. 事务的执行结果保证ACID
          3. 会用到数据库锁
    2. ACID概念与实现方式:
      1. Atomicity 原子性-undo log(回滚日志实现)
      2. Consistency 一致性-基于其他三个
      3. Durability 持久性-Redo log
      4. Isolation 隔离性-锁&MVCC
        1. 要求两个事务顺序执行,一个事务未完成,中间状态是不可见的
    3. undo log与redo log
      1. undo log
      2. redo log
    4. sql的隔离级别
      1. 读未提交
      2. 读提交
      3. 可重复读:通过间隙锁解决了幻读问题
      4. 串行化:效果最好,但是将事务执行变为哦顺序化,相当于单线程
    5. sql事务隔离级别要实际解决的问题

      1. 脏读:读到了其他事务未提交的数据(未提交意味着可能回滚,即最终不一定存在的数据)
      2. 幻读: 两次读取读到了不同的数据条数(其他事务提交了INSERT)
      3. 不可重复读:在一个事务内,多次读取的值不一致(其他事务提交了UPDATE)
      4. 丢失更新 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | | —- | —- | —- | —- | | 读未提交(Read uncommitted) | 可能 | 可能 | 可能 | | 读提交(Read committed) | 不可能 | 可能 | 可能 | | 可重复读(Repeatable reads) | 不可能 | 不可能 | 可能 | | 串行化(Serializable) | 不可能 | 不可能 | 不可能 |
    6. MVCC机制

      1. 简单理解,就是一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。 如果一个事务读取的行正在做DELELE或者UPDATE操作,读取操作不会等行上的锁释放,而是读取该行的快照版本
      2. 增强了并发性
      3. Mysql只有InnoDB支持
    7. 分布式事务
      1. 概念:在分布式环境下,一个请求可能涉及到多个数据库的写操作,需要保证多数据源的一致性必须用到分布式事务
    8. 常见分布式事务解决方案
      1. 2pc:整个事务分为两个阶段-准备阶段(P)与提交阶段(C)