好記憶不如爛筆頭,能記下點東西,就記下點,有時間拿出來看看,也會發覺不一樣的感受.
目錄
一、背景
本文主要測試MySQL執行update語句時,針對與原數據(即未修改)相同的update語句會在MySQL內部重新執行嗎?
二、測試環境
MySQL5.7.25
Centos 7.4
三、binlog_format爲ROW
1、參數
2、測試步驟
session1
session2
session1
3、總結
在binlog_format=row和binlog_row_image=FULL時,由於MySQL 需要在 binlog 裏面記錄所有的字段,所以在讀數據的時候就會把所有數據都讀出來,那麼重複數據的update不會執行。即MySQL 調用了 InnoDB 引擎提供的“修改爲 (1,55)”這個接口,但是引擎發現值與原來相同,不更新,直接返回。
四、binlog_format爲STATEMENT
1、參數
2、測試步驟
session1
session2
session1
3、總結
在binlog_format=statement和binlog_row_image=FULL時,InnoDB內部認真執行了update語句,即“把這個值修改成 (1,999)“這個操作,該加鎖的加鎖,該更新的更新。
4.結論
在binlog_format=statement和binlog_row_image=FULL時,InnoDB內部認真執行了 update 語句。
在binlog_format=row和binlog_row_image=FULL時,InnoDB內部認沒有執行 update 語句。