MySQL實戰02 一條更新語句怎麼執行的

2022-02-26 06:41:39 字數 784 閱讀 1170

更新語句執行過程大致與查詢過程相似

wal技術,write-ahead logging,先寫日誌再寫磁碟binlog(歸檔日誌)server層自己的日誌,binlog有兩種模式,statement 格式是記sql語句, row格式會記錄行的內容,記兩條,更新前和更新後都有。redo log(重做日誌)innodb引擎特有的日誌,擁有crash-safe能力(即使資料庫發生異常重啟,之前提交的記錄也不會丟失)。

兩階段提交:保證兩份日誌之間的邏輯一致(反證法)

1. 引擎將行資料更新到記憶體,同時將更新操作記錄到redo log中,此時redo log處於prepare狀態。然後告知執行器執行完了,隨時可以提交事務。

2. 執行器生成這個操作的binlog,寫入磁碟

3. 執行器呼叫引擎的提交事務介面,引擎把redo log改成提交狀態commit,更新完成。

不同點

1. redo log是innodb特有的;binlog是server層實現的,所有引擎可以用。

2. redo log是物理日誌,記錄「在某個資料頁做了什麼修改」;binlog是邏輯日誌,記錄語句的原始邏輯。

3. redo log是迴圈覆蓋寫的,空間固定會用完;binlog是追加寫,寫完乙個切換寫下乙個,不會覆蓋以前的日誌。

原文出處:

總結:理解兩種日誌的不同點和用途,兩階段提交

MySQL學習筆記(二)一條SQL更新語句

從乙個表的一條更新語句說起,下面是這個表的建立語句,這個表有乙個主鍵id和乙個整型欄位c mysql create table t id int primary key,c int 假如將id 2這一行的值加1 執行語句要先通過聯結器連線資料庫。在乙個表上更新的時候,跟這個表有關的查詢快取會失效。接...

一條SQL更新語句的執行過程

目錄如果執行這條更新語句資料庫是如何執行的呢?update student set name 小明 where studentid 1根據之前說過的sql語句查詢的流程來說,只要表上有資料更新,有關查詢的索引就會失效,接下來分析器會根據每個單詞識別知道這是update語句,優化器根據這個id獲取需要...

一條SQL更新語句是如何執行的

mysql create table t id int primary key,c int 如果要將id 2這一行的值加1,sql語句就會這麼寫 mysql update t set c c 1where id 2 執行語句前要先連線資料庫,這是聯結器的工作。在乙個表上有更新的時候,跟這個表有關的查...