MySQL中update修改數據與原數據相同時會再次執(zhí)行嗎?觸及到我的知識盲區(qū)了...
點擊上方[全棧開發(fā)者社區(qū)]→右上角[...]→[設為星標?]

一、背景
本文主要測試MySQL執(zhí)行update語句時,針對與原數據(即未修改)相同的update語句會在MySQL內部重新執(zhí)行嗎?
二、測試環(huán)境
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不會執(zhí)行。
即MySQL 調用了 InnoDB 引擎提供的“修改為 (1,55)”這個接口,但是引擎發(fā)現值與原來相同,不更新,直接返回。
四、binlog_format為STATEMENT
1、參數

2、測試步驟
session1

session2

session1

3、總結
在binlog_format=statement和binlog_row_image=FULL時,InnoDB內部認真執(zhí)行了update語句,即“把這個值修改成 (1,999)“這個操作,該加鎖的加鎖,該更新的更新。
覺得本文對你有幫助?請分享給更多人
關注「全棧開發(fā)者社區(qū)」加星標,提升全棧技能
本公眾號會不定期給大家發(fā)福利,包括送書、學習資源等,敬請期待吧!
如果感覺推送內容不錯,不妨右下角點個在看轉發(fā)朋友圈或收藏,感謝支持。
好文章,留言、點贊、在看和分享一條龍吧??
評論
圖片
表情
