update sql流程
2021-02-05 15:24:02 4 举报
一条update sql语句的整个流程
作者其他创作
大纲/内容
④将页的修改记录到redo log 将数据修改之前的记录保存到undo log并将这行记录状态设置为prepare状态
redo/undo log
① update teacher set name='彭于晏' where id =1
两阶段提交 ①UPDATE语句的结果写入内存,同时将这个操作写入redo log,此时redo log处于prepare状态,并告知执行器随时可以提交事物。 ②执行器生成这个操作的binlog,并写入binlog日志。 ③执行器通知将之前处于prepare状态改为commit状态,更新完成。两个阶段提交保证了redo log和binlog的一致性。
③将结果更新到内存
⑤修改好了就可以提交事务了
⑦提交事务(commit)
InnoDB 操作数据有一个最小的逻辑单位,叫做页(索引页和数据页)。我们对于数据的操作,不是每次都直接操作磁盘,因为磁盘的速度太慢了。InnoDB 使用了一种缓冲池的技术,也就是把磁盘读到的页放到一块内存区域里面。这个内存区域就叫 Buffer Pool
InnoDB存储引擎
客户端
Redo log如果 Buffer Pool 里面的脏页还没有刷入磁盘时,数据库宕机或者重启,这些数据丢失。如果写操作写到一半,甚至可能会破坏数据文件导致数据库不可用。为了避免这个问题,InnoDB 把所有对页面的修改操作专门写入一个日志文件,并且在数据库启动时从这个文件进行恢复操作(实现 crash-safe)——用它来实现事务的持久性。Undo logundo log(撤销日志或回滚日志)记录了事务发生之前的数据状态(不包括 select)。如果修改数据时出现异常,可以用 undo log 来实现回滚操作(保持原子性)
Server层
⑧将redo log里面这个事务相关的记录状态设置为commit状态
binlog
⑥将数据写入binlog
内存
②将id=1的数据从磁盘加载到内存并将name对应的值改成彭于晏
0 条评论
回复 删除
下一页