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)“这个操做,该加锁的加锁,该更新的更新。

相关文章
相关标签/搜索