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

背景

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

測試環境

  • MySQL5.7.25ide

  • Centos 7.4測試

binlog_format爲ROW

參數

816cbc903af64fb195afec65c33b674c

測試步驟

session1spa

cfc8d59ccdc443fab2c60837dec852f4

session2orm

1d574549e3464c2dbfda9283455841cf

session1blog

a9c0cafc-4243-4841-98e9-da76230c10e2

總結

  • 在binlog_format=row和binlog_row_image=FULL時,因爲MySQL 須要在 binlog 裏面記錄全部的字段,因此在讀數據的時候就會把全部數據都讀出來,那麼重複數據的update不會執行。即MySQL 調用了 InnoDB 引擎提供的「修改成 (1,55)」這個接口,可是引擎發現值與原來相同,不更新,直接返回接口

binlog_format爲STATEMENT

參數

420266bb7252437189c916410b4d6c49

測試步驟

session1it

f174b138795c47a59ce5b4a660906093

session2io

db85294768f944e0b1d5c6b181ad14f3

session1form

e5ec32bd-59e3-41f3-be68-b020753b4db5

總結

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

相關文章
相關標籤/搜索