1. 程式人生 > 資料庫 >例項驗證MySQL|update欄位為相同的值是否會記錄binlog

例項驗證MySQL|update欄位為相同的值是否會記錄binlog

一 前言

前幾天一個開發同事諮詢我,update 更新欄位為相同的值是否會記錄binlog,我回復說不會。

其實 嚴格的說這個答案是不準確的,說要區分場景。是否記錄 update 語句到binlog依賴於 binlog_format 的設定。具體情況 實踐出真知。

二 測試

2.1 binlog_format 為 ROW 模式

例項驗證MySQL|update欄位為相同的值是否會記錄binlog

2.2 binlog_format 為 STATEMENT 模式

例項驗證MySQL|update欄位為相同的值是否會記錄binlog

解析binlog內容,完整的記錄了update語句。

例項驗證MySQL|update欄位為相同的值是否會記錄binlog

2.2 binlog_format 為 MIXED 模式

例項驗證MySQL|update欄位為相同的值是否會記錄binlog

當 row_format 為mixed或者statement格式是,binlog 的大小發生改變,不管是否真的更新資料,MySQL都記錄執行的sql 到binlog。

三 小結

基於row模式時,server層匹配到要更新的記錄,發現新值和舊值一致,不做更新,就直接返回,也不記錄binlog。

基於 statement 或者 mixed格式,MySQL執行 update 語句,並把更新語句記錄到binlog。

那為什麼問題來了 statement 和 mixed 會完整的記錄sql語句呢?且聽下回分解吧,因為我要解析原始碼,使用Clion 編譯MySQL 除錯環境還沒成功。

以上就是例項驗證MySQL|update欄位為相同的值是否會記錄binlog的詳細內容,更多關於MySQL update欄位的資料請關注我們其它相關文章!