ACID

事务:InnoDB的杀手锏

  • 原子性(Atomicity)
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)

    原子性

  • 事务中的操作要么全部成功,要么全部失败

  • MySQL的两阶段提交保证了事务的原子性
  • undo log用来回滚事务的更改

    一致性(Consistency)

  • 事务必须使数据库从一个一致性的状态变换到另外一个一致性的状态

  • 锁和两阶段提交保证了一致性

    隔离性

  • 事务不能被其他事务的操作数据所感染

  • 多个并发事务之间要相互隔离
  • 锁和undo log实现了MySQL事务的隔离性

    持久性

  • 一个事务一旦被提交,它对数据库中数据的改变就是永久性的

  • redo log实现了MySQL事务的持久性

image.png

隔离级别

  • 读未提交(READ UNCOMMITTED)
  • 读提交(READ COMMITTED)
  • 可重复读(REPEATABLE READ)
  • 串行化(SERIALIZABLE)

    读未提交(READ UNCOMMITTED)

  • 读、写都不加锁,不隔离

  • 每次查询都查询到数据的最新版本
  • 性能最好,但是相当于没有事务,很少采用

    读提交(READ COMMINTTED)

  • 一般读取的时候,读取此时已经提交的事务

  • 写数据时,加X锁,提交时释放
  • Oracle默认的隔离级别

    可重复读(REPEATABLE READ)

  • 一般读取时,读取本事务开始时的数据状态

  • 写数据时,加X锁,提交时释放
  • MySQL数据库的默认隔离级别

    串行化(SERIALIZABLE)

  • 读加S锁、写加X锁,提交时释放

  • 对于一条数据,同时只能有一个事务进行写操作
  • 事务隔离性最高,很影响性能