mysql为保证实现ACID特性,
A表示原子性,需要保证多个dml操作的原子性,要么成功,要么失败,失败表示数据回滚,通过UNDO_LOG日志回滚到失败前的数据,
c表示数据一致性,也就是数据完整性约束没有被破坏,主键约束,数据长度和类型等一些保障。
i表示隔离性,也就是对同一个进操作的时候,如何避免多个事务进行干预,导致数据混乱的问题,MYSQL提供事务隔离级别RU(未提交读)RC(已提交读)RR(可重复读)Serializable(串行化),使用mvcc机制解决脏读和不重复的问题,表锁和行锁解决幻读。
D表锁持久化,也就数据成功提交了,永久保存到数据库,不会因为死机或者其他因为而数据被改变,理论上事务提交成功数据就会直接保存到磁盘上,因为随机读写的磁盘io确实低,为了解决这个问题引入buffer pool缓冲区进行优化,数据变更先放进缓存区,等到适合时机再放到磁盘上,但是这样有可能在数据持久化过程中出现死机导致数据丢失,所以引入REDO_LOG日志存储数据变更之后的值。