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,两段提交:“两阶段提交”是为了让两份日志之间的逻辑一致。