2 更新一條MySQL語句到底發生了什麼?

2021-10-09 09:23:18 字數 1414 閱讀 1188

1.redolog & binlog

2.剖析:update t set c=c+1 where id=2

3.redolog兩階段:prepare &commit

4.設定redolog&binlog持久化到磁碟

寫在開頭:

//本文涉及的資料庫語句:

create table t

(id int primary key)

;update t set c=c+

1 where id=

10;

1.redolog(重做日誌)&binlog(歸檔日誌)?舉個例子:

代文開了一家火鍋店,本店可以賒賬,倘若最近手頭緊,沒錢吃飯,可以先吃,在記賬。

記賬的這個工具,本店採用的是小黑板,記賬形式如下:

那麼 ,問題來了,這個黑板寫滿了,該怎麼辦?難道寫滿了,賒賬就無法繼續了嗎?或者說,若想繼續,就得之前記好的擦除,那張三李四還會認這筆帳嗎?!

這個時候,老闆就想了乙個機制-賬本,一旦黑板寫滿了,就記錄到賬本中,再將黑板內容自頂向下擦除,繼續賒賬~

1.1redolog(重做日誌)

redolog是innodb特有的日誌,可以模擬為上述提到的黑板,大小固定,保證即使資料庫發生異常重啟,之前的資料也不會丟失。也就是常聽到的crash-safe;

就好比火鍋店今天停業整頓,並不影響黑板和賬本上的資料,乙個道理。

1.2 binlog(歸檔日誌)

既然redolog和binlog在不同的模組,為什麼要設定兩個階段?prepare和commit有什麼作用?

思考:

寫在最後:

redolog是innodb引擎特有的,它***crash-safe的能力

好了,本文就到這裡吧,希望對你有所幫助~

MySQL一條語句更新多個表的方法

mysql本身是支援一條update語句更新多個表的,有時候這是非常有用的乙個特性。update low priority ignore table references set col name1 col name2 where where condition 於是繼續找table referen...

Mysql 一條語句的執行過程(2) 補充

欄位名稱有誤的sql解析 select from test2 where kkk 2 有興趣測了下這個kkk列不存在的時候什麼時候出錯已了解下對sql的解析過程 對應的 路徑 breakpoint 1,dispatch command thd 0x7efac40124f0,com data 0x7e...

mysql 插入更新一條sql 搞定

插入資料時,我們經常會遇到這樣的情況 1 首先判斷資料是否存在 2 如果不存在,則插入 3 如果存在,則更新。在sql server中可以這樣處理 if not exists select 1 from t where id 1 insert into t id,update time values...