update可以批量执行吗_MySQL中,当 update 修改数据与原数据相同时会再次执行吗?...

876df74c14e0cda041298af9def8ea88.png

一、背景

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

二、测试环境

MySQL5.7.25

Centos 7.4

三、binlog_format 为 ROW

1、参数

36a445067e6626a263d32a1a5a0788a2.png
参数

2、测试步骤

session1

0090043b7929a40f771cdc8f05570889.png
session1

session2

ce347b6eb4a3172b7b63e7bbb8c44f5b.png
session2

session1

445d834af791db22b33cb14100f7e24f.png
session1

3、总结

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

四、binlog_format 为 STATEMENT

1、参数

8fe62838f465e56621a19b2fff133808.png
参数

2、测试步骤

session1

ec3c41a4c26c069d1e5c53d1ab8934a2.png
session1

session2

80e24aba0afa2f58c5fcea5b7a7a3521.png
session2

session1

73a46b1968c722d5bcfa71cdd301fe58.png
session1

3、总结

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

作者 | powdba 

来源 | https://yq.aliyun.com/articles/694162

-END-

f9b1a4e8ab7b85499051c79b6b7438bc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值