MYSQL事务原理

254 阅读1分钟

前言

之前是用有道云网盘的记录的,由于是单机不能分享,感觉有点low,今天开始写掘金的博客,记录自己每天的进步。

事务的特性及其原理(ACID)

原子性

当事务需要回滚的时候,通过undo.log日志来回滚数据

隔离性

1)对于普通的select使用快照(shapshot read),底层使用Multi version currency control 来实现。
2)对于加锁的select (select ... in share mode) / select ... for update以及insert,update,delete等语句使用当前读,底层使用记录锁,间隙锁,临键锁。

持久性

redo log+double write buffer,操作数据先写进buffer pool,并记录redo log,如果刷盘之前出现异常,在重启后就可以读取redo log的内容,写入到磁盘,保证数据的持久性。恢复成功的前提是数据页本身没有被破坏,是完整的,这个通过双写缓冲保证。

一致性

一致性是通过原子性+持久性两个特性来保证的