一惊奇、背景
本文主要測試MySQL執(zhí)行update語句時,針對與原數(shù)據(jù)(即未修改)相同的update語句會在MySQL內(nèi)部重新執(zhí)行嗎播赁?
二颂郎、測試環(huán)境
MySQL5.7.25
Centos 7.4
三、binlog_format為ROW
1容为、參數(shù)
參數(shù)設置
2祖秒、測試步驟
session1
session1
session2
session2
session1
session1.png
3诞吱、總結
在binlog_format=row
和binlog_row_image=FULL時
由于MySQL 需要在 binlog 里面記錄所有的字段舟奠,所以在讀數(shù)據(jù)的時候就會把所有數(shù)據(jù)都讀出來竭缝,那么重復數(shù)據(jù)的update不會執(zhí)行。即MySQL 調(diào)用了 InnoDB 引擎提供的“修改為 (1,55)”這個接口沼瘫,但是引擎發(fā)現(xiàn)值與原來相同抬纸,不更新,直接返回耿戚。
四湿故、binlog_format為STATEMENT
1、參數(shù)
參數(shù).png
2膜蛔、測試步驟
session1
session1.png
session2
session2.png
session1
session1.png
3坛猪、總結
在binlog_format=statement
和binlog_row_image=FULL時,
InnoDB內(nèi)部認真執(zhí)行了update語句皂股,即“把這個值修改成 (1,999)“這個操作墅茉,該加鎖的加鎖,該更新的更新呜呐。