一條更新語句的執行跟查詢執行的流程是一樣的,也是如下圖:
不一樣的地方,會寫兩個日誌,兩段式提交:
redo log:在innodb寫,通過creach-safe模式寫。
bin log:在service寫,任何引擎都可以用,mysql公共執行日誌,記錄每一條語句執行。
redolog日誌在記憶體中是固定大小的,乙個組redo寫版是乙個1g,可以配置多組寫版。redo log是邊寫日誌到記憶體邊同步到磁碟。寫的指標為writepos,同步到磁碟的指標是checkpoint。當writepos要追趕checkpoint上時,這個時候就會停止下來擦除一些記錄,把checkpoint向前推。
bin log 是mysql serve層實現的,所有的引擎都可以用,記錄操作記錄。
當一條更新語句進入執行器後,先呼叫引擎介面,如果innodb判斷是否存在記憶體,如果存在就返回資料行,如果不存在就從磁碟讀入資料頁,然後返回行數。
server對行進行update操作。
通過引擎介面寫入新行,寫日rido日誌,此刻日誌處於prapare狀態。
server此時再寫bin log
提交事務,redo log處於commit狀態。
保證資料和日誌一致性
一條SQL更新語句是如何執行的
mysql create table t id int primary key,c int 如果要將id 2這一行的值加1,sql語句就會這麼寫 mysql update t set c c 1where id 2 執行語句前要先連線資料庫,這是聯結器的工作。在乙個表上有更新的時候,跟這個表有關的查...
一條SQL查詢語句是如何執行的
mysql可以分為server層和儲存引擎層兩部分 一條普通的查詢語是怎樣執行並返回結果了 聯結器查詢快取 大多數情況下建議不要使用查詢快取,查詢快取往往弊大於利。查詢快取的失效非常頻繁,只要有對乙個表的更新,這個表上所有的查詢快取都會被清空。分析器優化器 比如你執行下面這樣的語句,這個語句是執行兩...
一條SQL查詢語句是如何執行的?
我們在寫sql的時候crud這些基本的操作想必大家已經是得心應手了,專欄會更傾向於sql優化與執行過程模型的角度重新學習sql,方便大家在做效能優化上更加熟練。select from t where id 10 接下來我們來拆解一下這個sql語句,從中就可以看出sql在mysql中各個模組的執行過程...