MySQL中update修改数据与原数据相同会再次执行吗?
发布日期:2021-07-01 03:57:30 浏览次数:2 分类:技术文章

本文共 634 字,大约阅读时间需要 2 分钟。

作者:powdba 来源:阿里云栖社区

一、背景

本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?

二、测试环境

MySQL5.7.25

Centos 7.4

三、binlog_format为ROW

1、参数

640?wx_fmt=png

2、测试步骤

session1

640?wx_fmt=png

session2

640?wx_fmt=png

session1

640?wx_fmt=png

3、总结

binlog_format=row

和binlog_row_image=FULL时,

由于MySQL 需要在 binlog 里面记录所有的字段,所以在读数据的时候就会把所有数据都读出来,那么重复数据的update不会执行。即MySQL 调用了 InnoDB 引擎提供的“修改为 (1,55)”这个接口,但是引擎发现值与原来相同,不更新,直接返回。

四、binlog_format为STATEMENT

1、参数

640?wx_fmt=png

2、测试步骤

session1

640?wx_fmt=png

session2

640?wx_fmt=png

session1

640?wx_fmt=png

3、总结

在binlog_format=statement

和binlog_row_image=FULL时,

InnoDB内部认真执行了update语句,即“把这个值修改成 (1,999)“这个操作,该加锁的加锁,该更新的更新。

- MORE | 往期精彩文章 -

如果你喜欢本文

请长按二维码关注民工哥技术之路

640?

转发朋友圈,是对我最大的支持。

640?

扫码加群交流

点击【阅读原文】公众号所有的精华都在这

在看的读者,请点这里↓

转载地址:https://mingongge.blog.csdn.net/article/details/89368729 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:马云谈996
下一篇:利用 ELK 搭建 Docker 容器化应用日志中心

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年05月03日 23时38分41秒