执行一条update会发生什么?

发布时间 2023-05-25 19:14:34作者: coooooookie

1、和查询语句一样也会走一遍连接器、解析器、预处理器、优化器、执行器

 

2、执行器在更新数据前,会先查看buffer pool中是否存在要更新的数据,如果不存在则从磁盘加载到buffer pool,存在则进行修改

 

3、innodb把旧值写入undo log

 

4、innodb把新值写到buffer pool

 

5、innodb写redo log并标记为prepare

 

6、执行器写bin log

 

7、innodb写redo log并标记为commit,这样就完成了两阶段提交,事务提交后,redo log 和bin log都要持久化到磁盘

 

三大日志:

undo log : 回滚日志,在异常发生时,对已经执行的操作进行回滚,保证事物的原子性

redo log: 重做日志,是innodb独有的,一旦mysql宕机了,可以使用redo log恢复数据,保证事物的持久性

bin log : 归档日志,是逻辑日志,bin log在数据库备份时可以同步数据,保证事物的一致性