mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?

本文同步Java知音社区,专注于Java

作者:powdba https:// yq.aliyun.com/articles/ 694162

一、背景

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

二、测试环境

MySQL5.7.25
Centos 7.4

三、binlog_format为ROW

1、参数

712a9fbe4e63453e7cdc9a1da128dc5f.png

2、测试步骤

session1

f3cc2e25e6bf4c7a6aa79a67d9f77277.png


session2

1ab85cbd152b8a050cccc35f157f97b6.png


session1

bee7fb51481d39112da016ee7c5f2da5.png

3、总结

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

四、binlog_format为STATEMENT

1、参数

f8a0a9eb27fa14b1a291b8c15513b8d9.png

2、测试步骤

session1

8c653a6b9a40789275a2ef5a5b7d7482.png


session2

9110223533dff5cc47f6b7426117f5bb.png


session1

9c1c4cb675fe5b3fbfb466d1d2b6aac4.png

3、总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值