當update修改數據與原數據相同時會再次執行嗎

好記憶不如爛筆頭,能記下點東西,就記下點,有時間拿出來看看,也會發覺不一樣的感受.

目錄

一、背景

二、測試環境

三、binlog_format爲ROW

四、binlog_format爲STATEMENT


一、背景

本文主要測試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 語句。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章