mysql-ACID的实现

原子性(atomicity)

mysql实现原子性靠undo log实现,undo log和redo 
log记录物理日志不一样,它是逻辑日志。
可以认为当delete一条记录时,undo log中会记录一条对应
的 insert记录,反之亦然,当update一条记录时,
它记录一条对应相反的update记录。当执行rollback时,就可
以从undo log中的逻辑记录读取到相应的内容并进行回滚

一致性(consistency)

mysql一致性靠redo log + undo log 二阶段提交实现. 先把数据写入redo log这个logbuffer缓冲区中, 写完状态改为prepare, 之后再写入到undo log 这个logbuffer缓冲区中, 之后再进行commit. 这样无论什么时候都能保证redo undo数据是一样

隔离性(isolation)

通过mysql的一些锁机制完成

持久性(durability)

mysql持久需要redo log先将数据写入到缓冲区,之后(可以配置一些策略)将缓冲区的数据使用内核空间的fsync()函数写入到磁盘中.
模拟简单事务提交

-Undo+Redo
事务的简化过程
假设有A、B两个数据,值分别为1,2.
A.事务开始.
B.记录A=1到undolog.
C.修改A=3.
D.记录A=3到redolog.
E.记录B=2到undolog.
F.修改B=4.
G.记录B=4到redolog.
H.将redolog写入磁盘。
I.事务提交

你可能感兴趣的:(mysql)