MySQL 中 update 修改數據與原數據相同會再次執行嗎?


閱讀本文大概需要 2.8 分鍾。

作者:powdba 來源:阿里雲棲社區

一、背景

本文主要測試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)“這個操作,該加鎖的加鎖,該更新的更新。

 

 

·END·

程序員的成長之路

路雖遠,行則必至

 

本文原發於 同名微信公眾號「程序員的成長之路」,回復「1024」你懂得,給個贊唄。

 

往期精彩回顧

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM