mysql update字段的值一样_实例验证MySQL|update字段为相同的值是否会记录binlog

本文探讨了MySQL中update语句在更新字段值不变时,是否记录binlog的情况。根据binlog_format设置(ROW、STATEMENT、MIXED模式),更新行为和binlog记录情况有所不同。在ROW模式下,如果新值与旧值相同,MySQL将不进行更新且不记录binlog。而STATEMENT或MIXED模式下,即便值未改变,MySQL仍会记录update语句到binlog。
摘要由CSDN通过智能技术生成

一 前言

前几天一个开发同事咨询我,update 更新字段为相同的值是否会记录binlog,我回复说不会。

其实 严格的说这个答案是不准确的,说要区分场景。是否记录 update 语句到binlog依赖于 binlog_format 的设置。具体情况 实践出真知。

二 测试

2.1  binlog_format 为 ROW 模式

37de1007a1bc04c1cd83422ec72ac255.png

2.2  binlog_format 为 STATEMENT 模式

82c371ce037d9a3ad134616c9b83286c.png

解析binlog内容,完整的记录了update语句。

8d5ebea274ad9851a2dded6ed1d6f21d.png

2.2  binlog_format 为 MIXED 模式

b393ba054a29305f6194444b6a40f013.png

当 row_format 为mixed或者statement格式是,binlog 的大小发生改变,不管是否真的更新数据,MySQL都记录执行的sql 到binlog。

三 小结

基于row模式时,server层匹配到要更新的记录,发现新值和旧值一致,不做更新,就直接返回,也不记录binlog。

基于 statement 或者 mixed格式,MySQL执行 update 语句,并把更新语句记录到binlog。

那为什么问题来了 statement 和 mixed 会完整的记录sql语句呢?且听下回分解吧,因为我要解析源码,使用Clion 编译MySQL 调试环境还没成功。

以上就是实例验证MySQL|update字段为相同的值是否会记录binlog的详细内容,更多关于MySQL update字段的资料请关注脚本之家其它相关文章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值