ACID特性

MyISAM不能完整支撑ACID特性。

原子性(A):

事务中的每个操作要像原子一样不可分割,要么全部成功,要么全部失败。
提供了undo log日志,一行数据的一次改动对应一条undo log日志,如果有操作异常则会触发回滚,反向执行undo log日志,将数据恢复到这些操作之前。

一致性

在原子性 + 隔离性 + 持久性都完成的基础上,一致性也就完成了

隔离性(I)

事务之间不能相互干扰,不能查看彼此提交的数据
写-写隔离(锁)、写-读隔离(MVCC)

三大问题

  1. 脏读:A事务读到B事务还没有提交的数据
    b2c6b98821304382ba979d7b4e40fd4e.png
  2. 不可重复读:A事务执行过程中,对同一条事务进行两次读取,在第一次读和第二次读之间,B事务修改了这条数据并提交,A事务的两次读取读到了两个不同的数据
    5643f7b9429948cc9d97954192eb90ef.png
  3. 幻读:A事务执行过程中,对同一个集合进行两次读取,在第一次读和第二次读之间,B事务增加或删除了部分数据,A事务两次读取读到数量不一致的行数据
    0158cced197b4153acc847121842f9f6.png

四种隔离级别(解决三大问题)

  1. 读未提交:会出现脏读、不可重复读、幻读
  2. 读已提交:解决脏读问题
  3. 可重复读:解决脏读、不可重复读问题
  4. 串行读:解决脏读、不可重复读、幻读
    f5ce755c28fe41e1815d3a29f86e6124.png

持久性(D)

事务一旦提交,就不会因为意外的发生而丢失。
通过redo log机制来保证故障后,内存中丢失的数据会恢复磁盘中。