

作者: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 -
推荐阅读:
Windows环境下Oracle11gR2的安装与卸载
关系型数据库MySQL之InnoDB体系结构
关系型数据库MySQL表索引和视图详解
Linux 运维必备的 40 道面试精华题
关系型数据库MySQL体系结构详解
资源分享:
5T技术资源大放送!包括但不限于:Linux,Python,Oracle,MySQL,Java,前端,大数据,人工智能等,具体获取方式可关注本公众号或者添加我微信获取~~~


长按添加微信,可加入资源技术交流群
获取更多付费资源

长按识别二维码即可关注!
点我,在看
最后修改时间:2020-03-24 17:27:29
文章转载自JiekeXu之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




