数据库学习 1.31 一条更新语句是怎么执行的?

图片来自极客时间

1. 连接器,连接数据库。

2. 清空表T上所有缓存结果。

3. 分析器,会通过词法和语法解析知道这是一条更新语句。

4. 优化器决定要使用 ID 这个索引。

5. 执行器负责具体执行,找到这一行,然后更新。

更新操作涉及日志:redo log(重做日志)和 binlog(归档日志)

Redo log:(引擎InnoDB的日志)记录用户提交的需要更新数据库的操作。

Binlog:(Serve层日志)归档日志。

异同一一

1. redo log是InnoDB引擎特有;binlog是MySQL的日志

2. redo log记录物理含义,在xx表做的xx修改;binlog记录逻辑含义,给ID=2这一行的c字段+1

3. redo log循环写,空间会用完;binlog追加写,一个文件满了就写入下个文件

4. redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘,可以保证 MySQL 异常重启之后数据不丢失;sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘,可以保证 MySQL 异常重启之后 binlog 不丢失。

图片来自极客时间

prepare/commit,两段提交:“两阶段提交”是为了让两份日志之间的逻辑一致。

你可能感兴趣的:(数据库学习 1.31 一条更新语句是怎么执行的?)