知乎高赞:当update修改数据与原数据相同时会再次执行吗?
背景
测试环境
binlog_format为ROW
测试步骤
总结
binlog_format为STATEMENT
测试步骤
总结
背景
本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?
测试环境
MySQL5.7.25
Centos 7.4
binlog_format为ROW
参数
root@localhost : (none) 04:53:15> show variables like 'binlog_row_image';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| binlog_row_image | FULL |
+------------------+-------+
1 row in set (0.00 sec)root@localhost : (none) 04:53:49> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)root@localhost : test 05:15:14> show variables like 'transaction_isolation';
+-----------------------+-----------------+
| Variable_name | Value |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
测试步骤
session1
root@localhost : test 04:49:48> begin;
Query OK, 0 rows affected (0.00 sec)root@localhost : test 04:49:52> select * from test where id =1;
+----+------+------+------+
| id | sid | mid | name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 row in set (0.00 sec)root@localhost : (none) 04:54:03> show engine innodb status\Gshow master status\G
...
---
LOG
---
Log sequence number 12090390
Log flushed up to 12090390
Pages flushed up to 12090390
Last checkpoint at 12090381
0 pending log flushes, 0 pending chkp writes
33 log i/o's done, 0.00 log i/o's/second*************************** 1. row ***************************File: mysql-bin.000001Position: 154Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
session2
root@localhost : test 04:47:45> update test set sid=55 where id =1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0root@localhost : (none) 04:54:03> show engine innodb status\Gshow master status\G
...
---
LOG
---
Log sequence number 12091486
Log flushed up to 12091486
Pages flushed up to 12091486
Last checkpoint at 12091477
0 pending log flushes, 0 pending chkp writes
39 log i/o's done, 0.00 log i/o's/second*************************** 1. row ***************************File: mysql-bin.000001Position: 500Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 row in set (0.00 sec)
session1
root@localhost : test 04:49:57> update test set sid=55 where id =1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0root@localhost : (none) 04:54:03> show engine innodb status\Gshow master status\G
...
---
LOG
---
Log sequence number 12091486
Log flushed up to 12091486
Pages flushed up to 12091486
Last checkpoint at 12091477
0 pending log flushes, 0 pending chkp writes
39 log i/o's done, 0.00 log i/o's/second*************************** 1. row ***************************File: mysql-bin.000001Position: 500Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 row in set (0.00 sec)root@localhost : test 04:52:05> select * from test where id =1;
+----+------+------+------+
| id | sid | mid | name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 row in set (0.00 sec)root@localhost : test 04:52:42> commit;
Query OK, 0 rows affected (0.00 sec)root@localhost : test 04:52:52> select * from test where id =1;
+----+------+------+------+
| id | sid | mid | name |
+----+------+------+------+
| 1 | 55 | 871 | NW |
+----+------+------+------+
1 row in set (0.00 sec)
总结
在binlog_format=row和binlog_row_image=FULL时,由于MySQL 需要在 binlog 里面记录所有的字段,所以在读数据的时候就会把所有数据都读出来,那么重复数据的update不会执行。即MySQL 调用了 InnoDB 引擎提供的“修改为 (1,55)”这个接口,但是引擎发现值与原来相同,不更新,直接返回
binlog_format为STATEMENT
参数
root@localhost : (none) 04:53:15> show variables like 'binlog_row_image';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| binlog_row_image | FULL |
+------------------+-------+
1 row in set (0.00 sec)root@localhost : (none) 05:16:08> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)root@localhost : test 05:15:14> show variables like 'transaction_isolation';
+-----------------------+-----------------+
| Variable_name | Value |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
测试步骤
session1
root@localhost : test 05:16:42> begin;
Query OK, 0 rows affected (0.00 sec)root@localhost : test 05:16:44> select * from test where id =1;
+----+------+------+------+
| id | sid | mid | name |
+----+------+------+------+
| 1 | 111 | 871 | NW |
+----+------+------+------+
1 row in set (0.00 sec)root@localhost : (none) 05:16:51> show engine innodb status\Gshow master status\G
...
---
LOG
---
Log sequence number 12092582
Log flushed up to 12092582
Pages flushed up to 12092582
Last checkpoint at 12092573
0 pending log flushes, 0 pending chkp writes
45 log i/o's done, 0.00 log i/o's/second*************************** 1. row ***************************File: mysql-bin.000001Position: 154Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
session2
root@localhost : test 05:18:30> update test set sid=999 where id =1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0root@localhost : (none) 05:18:47> show engine innodb status\Gshow master status\G
...
---
LOG
---
Log sequence number 12093678
Log flushed up to 12093678
Pages flushed up to 12093678
Last checkpoint at 12093669
0 pending log flushes, 0 pending chkp writes
51 log i/o's done, 0.14 log i/o's/second*************************** 1. row ***************************File: mysql-bin.000001Position: 438Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 row in set (0.00 sec)
session1
root@localhost : test 05:16:47> update test set sid=999 where id =1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0root@localhost : (none) 05:20:03> show engine innodb status\Gshow master status\G
...
---
LOG
---
Log sequence number 12094504
Log flushed up to 12094504
Pages flushed up to 12094504
Last checkpoint at 12094495
0 pending log flushes, 0 pending chkp writes
56 log i/o's done, 0.00 log i/o's/second*************************** 1. row ***************************File: mysql-bin.000001Position: 438Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 row in set (0.00 sec)root@localhost : test 05:19:33> select * from test where id =1;
+----+------+------+------+
| id | sid | mid | name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 row in set (0.00 sec)root@localhost : test 05:20:44> commit;
Query OK, 0 rows affected (0.01 sec)root@localhost : test 05:20:57> select * from test where id =1;
+----+------+------+------+
| id | sid | mid | name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 row in set (0.00 sec)
总结
在binlog_format=statement和binlog_row_image=FULL时,InnoDB内部认真执行了update语句,即“把这个值修改成 (1,999)“这个操作,该加锁的加锁,该更新的更新。
来源:zhuanlan.zhihu.com/p/59717198
关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。
猜你喜欢
1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结
2、如何才能成为优秀的架构师?
3、从零开始搭建创业公司后台技术栈
4、程序员一般可以从什么平台接私活?
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6、滴滴业务中台构建实践,首次曝光
7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
8、15张图看懂瞎忙和高效的区别
9、2T架构师学习资料干货分享
知乎高赞:当update修改数据与原数据相同时会再次执行吗?相关推荐
- 知乎高赞,6款办公工具,小白逆袭成职场大神
与其想着加班到几点,不如考虑如何做到上班高效"摸鱼",下班准点回家,工资还能往上涨! 今天小编为大家找到了知乎高赞的6款实用工具推荐,办公不翻车,小白逆袭成职场大神. 01.ppt ...
- “2021知乎高赞好物100”榜单揭晓 知乎为美好生活奉上参考答案
10月26日,"2021知乎高赞好物100"榜单正式揭晓,上榜商品均在知乎有着较高搜索.热度和销量.榜单涉及食品.家居.休闲娱乐.美妆.数码3C等各品类好物,由各个相关领域的专业知 ...
- 5款知乎高赞的超牛软件,你一定要知道
你的电脑上有哪些宝藏实用软件?今天来给大家分享5款知乎高赞的超牛软件,你一定要知道! 先收藏后评论!良心单品多多! Notion Notion是一款老牌的高质量个人知识管理软件. 它高效地帮助用户安排 ...
- 爬取知乎高赞情话,甜蜜过七夕
又是一年一度的七夕情人节了! 有女朋友的就牵好手,有男朋友的就抱紧腿,什么都么得的小伙伴就带好装备,静静的吃狗粮就ok了. 在这个到处都冒着粉红泡泡的日子,不做点什么都不太好意思. 作为一名合格的代码 ...
- 读书笔记第一篇:知乎高赞回答
自从今年以来,生活发生了极大变化,自己也进入了30大关,开始奔四了.最近总觉得自己一事无成,无论物质还是精神上都没有得到满足,而且自己一个游戏程序员,越来越觉得逐渐被淘汰.所以想到的第一个挣扎的办法, ...
- 知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问"中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?" 事实上,还不少呢~ 本人于201 ...
- 知乎高赞:35岁失业的程序员,都去了哪儿?
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨临公子 来源丨临公子的后花园(ID:hi-li ...
- 为啥程序员撕996建筑人不撕007?——晒知乎高赞沙雕回答,和说说工程师文化
轻友们大家好~我是珍妮兔,一只工程效率顾问.我的日常生活是在不同的软件研发团队和大家聊天,给大家分享各种轻松把软件做好的最佳实践.如果你有特别想要解决的问题,不妨加我的个人微信:jenny1652告诉 ...
- MySQL中,当update修改数据与原数据相同时会再次执行吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:powdba https://yq.aliyun.com/a ...
- 知乎高赞 | Go 技术一面一般考哪些内容
这两天在知乎看到一个问题:如果你是一个Golang面试官,你会问哪些问题? 高赞回答是一位来自百度的工程师给出的答案,我觉得给出的考察点很到位,如果有准备面试的小伙伴可以按照这些考察点准备面试前要学习 ...
最新文章
- 调整代码生成工具Database2Sharp的Winform界面生成,使其易于列表工具栏的使用。...
- 线性回归和logistic回归
- 基于多任务学习和负反馈的深度召回模型
- python 代码文件路径注意事项
- PHP7.2的安装与配置(win7)
- 实战:RedisCluster搭建和扩容(伪集群:4主4从)
- pattern recognition and machine learning基本思想1:最大似然估计
- win7变成xp风格了怎么改回_让电脑提速的几种方法(老电脑太卡怎么提速)
- 谷歌、Facebook 大规模宕机!“裸奔时代”程序员该怎么办?
- MySQL增量备份恢复和基于时间点与位置的恢复
- iOS 录音及播放 音波图波形
- 通用的业务编码规则设计实现
- jQuery版本低引起的漏洞——CVE-2020-11022/CVE-2020-11023
- python单例模式数据库连接池_Python单例模式的实现
- 袁老走好,谢谢您!我辈也当自强。
- opencv附加依赖项
- java程序设计实用教程_清华大学出版社-图书详情-《Java程序设计实用教程》
- android有什么作用,Android 7.0有什么功能 Android N完整功能参数介绍
- 这个商业模式、盈利模式、谈判技巧值得借鉴!
- 社区儿童计算机活动总结,幼儿园与社区活动总结
热门文章
- 什么是 Hadoop 生态系统
- [MVC学习笔记]4.使用Log4Net来进行错误日志的记录
- 浅谈Linux用户权限管理之三(文件与权限的设定)
- DOS批处理高级教程:第二章 DOS循环for命令详解(转)
- ORACLE10G让空间管理变轻松【SPACE MANAGEMENT MAKE EASILY ON ORACLE10G】
- 苹果mac交互原型设计软件:Axure RP
- Illustrator 教程,如何在 Illustrator 中创建色板?
- 如何自动清理从 Mac 到 Dropbox 的屏幕截图?
- 如何将PDF转成Excel格式?
- ios开发之cocoapods导入新三方库报错RuntimeError - [Xcodeproj] Unknown object version.