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

孤獨鍵客發表於2019-04-24
閱讀本文大概需要 2.8 分鐘。

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

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

一、背景

本文主要測試MySQL執行update語句時,針對與原資料(即未修改)相同的update語句會在MySQL內部重新執行嗎?

二、測試環境

MySQL5.7.25 Centos 7.4

三、binlog_format為ROW

1、引數

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

2、測試步驟

session1

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

session2

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

session1

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

3、總結

在binlog_format=row和binlog_row_image=FULL時,由於MySQL 需要在 binlog 裡面記錄所有的欄位,所以在讀資料的時候就會把所有資料都讀出來,那麼重複資料的update不會執行。即MySQL 呼叫了 InnoDB 引擎提供的“修改為 (1,55)”這個介面,但是引擎發現值與原來相同,不更新,直接返回。

四、binlog_format為STATEMENT

1、引數

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

2、測試步驟

session1

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

session2

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

session1

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

3、總結

在binlog_format = statement 和 binlog_row_image = FULL 時,InnoDB 內部認真執行了 update 語句,即“把這個值修改成 (1,999)“這個操作,該加鎖的加鎖,該更新的更新。



·END·

程式設計師的成長之路

路雖遠,行則必至

本文原發於 同名微信公眾號「程式設計師的成長之路」,回覆「1024」你懂得,給個讚唄。


往期精彩回顧




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902700/viewspace-2642336/,如需轉載,請註明出處,否則將追究法律責任。

相關文章