mysql> update T set c=c+1 where ID=2;
拿上面这条update语句来说吧
执行流程还是跟select语句差不多的,无非就是 连接器–分析器–优化器–执行器,执行器找到这一行并按照要求把c更新了,整个update过程结束了吗?
还有两个日志模块 redo log 和 binlog。重做日志和归档日志
redo log是InnoDB引擎所有的
当更新很密集是,频繁的操作磁盘会让效率很低,这时候mysql将这些更新全部记录到redo log中,即先写日志,等到空闲的时候再写磁盘,并擦除对应的日志
InnoDB的redo log是一片固定的环形磁盘(为什么是磁盘而不是内存?因为已经被执行的update和没有被执行的但是写入到redo log中的update共同组成了数据的完整性,存在磁盘中才保证断电重启后依然完整)
write_pos就是当前写入位置,check_point就是执行位置,执行了就擦除,她两之间的空闲(绿色)就是redolog的空闲空间