ACID特性
MyISAM不能完整支撑ACID特性。
原子性(A):
事务中的每个操作要像原子一样不可分割,要么全部成功,要么全部失败。
提供了undo log
日志,一行数据的一次改动对应一条undo log日志,如果有操作异常则会触发回滚,反向执行undo log日志,将数据恢复到这些操作之前。
一致性
在原子性 + 隔离性 + 持久性都完成的基础上,一致性也就完成了
隔离性(I)
事务之间不能相互干扰,不能查看彼此提交的数据
写-写隔离(锁)、写-读隔离(MVCC)
三大问题
- 脏读:A事务读到B事务还没有提交的数据
- 不可重复读:A事务执行过程中,对同一条事务进行两次读取,在第一次读和第二次读之间,B事务修改了这条数据并提交,A事务的两次读取读到了两个不同的数据
- 幻读:A事务执行过程中,对同一个集合进行两次读取,在第一次读和第二次读之间,B事务增加或删除了部分数据,A事务两次读取读到数量不一致的行数据
四种隔离级别(解决三大问题)
- 读未提交:会出现脏读、不可重复读、幻读
- 读已提交:解决脏读问题
- 可重复读:解决脏读、不可重复读问题
- 串行读:解决脏读、不可重复读、幻读
持久性(D)
事务一旦提交,就不会因为意外的发生而丢失。
通过redo log
机制来保证故障后,内存中丢失的数据会恢复磁盘中。