MySQL中更新修改的数据如果与原始数据相同还会再次执行吗?

分类:编程技术 时间:2024-02-20 15:17 浏览:0 评论:0
0
小编跟大家分享一下MySQL中更新修改的数据如果与原始数据相同是否会再次执行。相信大多数人对此还不是很了解,所以分享这篇文章供大家参考。希望您读完本文后有所启发。收获,我们一起来了解一下吧!

文章主要测试MySQL何时执行更新语句。 MySQL内部会重新执行与原始数据相同(即未修改)的更新语句吗?

测试环境
MySQL5.7.25Centos 7.4
binlog_format为ROW

参数

root@localhost : (none) 04:53:15> 显示像 'binlog_row_image' 这样的变量;+--------------------------------+--- ----+|变量名 |值|+----------------+------+| binlog_row_image |完整 |+------ ------------+--------+集合中的 1 行(0.00 秒)root@localhost :(无)04:53:49 > 显示“binlog_format”等变量; + ---------------+--------+|瓦里亚名称 |值 |+---------------+---- ---+| binlog_format | 二进制日志格式ROW |+---------------+--------+set (0.00 sec)root@localhost 中的 1 行:测试 05:15 :14> 显示类似 ' 的变量transaction_isolation';+------------------------+---------------- --+|变量名 |值 |+--------------------------------+----------------+|事务隔离 |可重复读取 |+--------------------------------+--------------------+1 行在设置中(0.00秒)
测试步骤

session1

root @ localhost : test 04:49:48> 开始;查询正常,0 行受影响 (0.00 秒)root@localhost : test 04:49:52> select * from test where id =1;+----+-- - ---+------+------+|编号 |席德 |中|姓名 |+----+------+------+-- ----+| 1 | 999 | 871 | 871 NW |+----+------+------+------+集合中的 1 行(0.00 秒)root @localhost : (无) 04:54:03> show engine innodb status\Gshow master status\G.....LOG---日志序列号12090390日志刷新到12090390页面刷新到12090390最后一个检查点在120903810 待处理日志刷新,0 待处理 chkp 写入33 日志 i/o 已完成,0.00 日志 i/o/秒**************************** ** 1. 行 ** ************************** 文件:mysql-bin.000001 位置:154 Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:1 行设置中(0.00 秒)

session2

root@localhost : test 04:47:45>更新测试集 sid=55 其中 id =1;查询正常,1 行受影响(0.01 秒)匹配的行:1 已更改:1 警告:0root@localhost :(无)04:54:03> 显示引擎 innodb 状态\Gshow master status\G...---LOG---日志序列号 12091486日志刷新最多 12091486页刷新最多 12091486最后一个检查点位于 120914770 待处理的日志刷新,0 待处理的 chkp 写入39 日志 i/o 已完成,0.00 日志 i/o/秒* ************** ********** 1. 行 ********************** ****** 文件:mysql-bin.000001 位置:500 Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:8392d215-4928-11e9-a751-0242ac110002:集合中的11行(0.00秒)

session1

root@localhost : test 04:49:57> 更新测试集 sid=55 其中 id =1;查询正常,0 行受影响(0.00 秒)行匹配:1 更改:0 警告:0root@localhost:(无)04:54:03> 显示引擎 innodb 状态\Gshow 主状态\G...---LOG- --日志序列号 12091486日志刷新最多 12091486页面刷新最多 12091486最后一个检查点位于 120914770 待处理的日志刷新,0 待处理的 chkp writes39 日志 i/o 完成,0.00 日志 i/o/秒************ ****************** 1. 行 ********** ************** 文件: mysql-bin.000001 位置:500 Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:8392d215-4928-11e9-a751-0242ac110002:集合中的11行(0.00秒)root @localhost:测试04:52:05>从测试中选择*,其中id = 1;+----+------+------+------+|编号 |席德 |中|姓名|+----+------+------+------+| 1 | 999 | 871 | 871 NW |+----+--- ---+-----+------+1 行集合(0.00 秒)root@localhost :测试 04:52:42> 提交;查询正常,0 行受影响(0.00 秒)root @localhost : 测试 04:52:52> 从测试中选择 *,其中 id =1;+----+------+--------+-----+|编号 |席德 |中|姓名|+----+------+------+------+| 1 | 55 | 55 871 | 871 NW |+----+--- ---+-----+------+1 行(0.00 秒)
摘要
< p>当binlog_format=row且binlog_row_image=FULL时,由于MySQL需要记录binlog中的所有字段,因此在读取数据时,会读取所有数据,不会执行重复数据的更新。即MySQL调用InnoDB引擎提供的“修改为(1,55)”接口,但引擎发现该值与原来相同,不更新,直接返回

binlog_format 是语句

参数

root@localhost : (none) 04:53:15> 显示像 'binlog_row_image' 这样的变量;+--- --------------+--------+|变量名 |值 |+----------------+- ------+| binlog_row_image | FULL |+------------------+--------+1 行(0.00 秒)root@ localhost : (非e) 05:16:08> 显示诸如 'binlog_format' 之类的变量;+----------------+------------+|变量名 |值 |+---------------+------------+| binlog_format | 二进制日志格式语句 |+------------- --+------------+集合中的 1 行(0.00 秒)root@localhost :测试 05:15:14>显示诸如 'transaction_isolation' 之类的变量;+-------- --------------+-------------------- +|变量名 |值 |+--------------------+----------------+|事务隔离 | REPEATABLE-READ |+---------- -------------+-----------------+1 行设置(0.00 秒)
测试步骤

session1

root@localhost : test 05:16:42> 开始;查询正常,0 行受影响 (0.00 秒)root@localhost : test 05:16:44> select * from test where id =1;+----+---- --+------+------+|编号 |席德 |中|姓名|+----+------+------+------+| 1 | 111 | 111 871 | 871 NW |+-- --+------+------+-----+1 行(0.00 秒)root@localhost :(无)05:16:51> show engine innodb status\ Gshow master status\G...---LOG---Log sequ编号 12092582日志刷新最多 12092582页刷新最多 12092582最后一个检查点位于 120925730 待处理的日志刷新,0 待处理的 chkp 写入45 日志 i/o 已完成,0.00 日志 i/o/秒**************** ************** 1. 行 ****************** ******** 文件:mysql-bin.000001位置:154 Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:集合中的 1 行(0.00 秒)

session2

 root@localhost :测试 05: 18:30> 更新测试集 sid=999,其中 id =1;查询正常,1 行(0.00 秒)匹配的行:1 更改:1 警告:0root@localhost :(无)05:18 :47> 显示引擎 innodb 受影响的状态\G显示主状态\G...---LOG---日志序列号 12093678日志刷新到 12093678页面刷新到 12093678最后一个检查点在 120936690 待处理的日志刷新,0 待处理的 chkp 写入 51 日志 i/ o 已完成,0.14 log i/ o's/秒******************************** 1. 行******** ********* ********** 文件:mysql-bin.000001 位置:438 Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:8392d215-4928-11e9-a751-0242ac110002:集合中的 11 行(0.00 秒)

session1

root@localhost : 测试 05:16:47> 更新测试集 sid=999,其中 id =1;查询正常,0 行受影响(0.00 秒)匹配的行:1 已更改:0 警告:0root@localhost : (无) 05:20:03> show engine innodb status\Gshow master status\G...---LOG---日志序列号 12094504日志刷新至 12094504页面刷新至 12094504最后一个检查点位于 120944950 待处理的日志刷新,0 待处理的 chkp 写入56记录 i/o 已完成,0.00 记录 i/o/秒******************************** 1. 行 **** ********************** 文件:mysql-bin.000001 位置:438 Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set:8392d215-4928-11e9-a751-0242ac110002:11 set 中的行 (0.00 秒)root@localhost : test 05:19:33> select * from test where id =1; +----+------+----- -+------+|编号 |席德 |中|姓名|+----+------+------+------+| 1 | 999 | 871 | 871 NW |+----+------+------+------+1 第 i 行n set (0.00 sec)root@localhost : test 05:20:44> commit;Query OK, 0 rows受影响 (0.01 sec)root@localhost : test 05:20:57> select * from test where id =1;+ ---+------+----- -+------+|编号 |席德 |中|姓名|+----+------+------+------+| 1 | 999 | 871 | 871 NW |+----+------+------+------+1 行(0.00 秒)

以上就是MySQL中update修改的数据与原数据相同是否会再次执行的全部内容。感谢您的阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注行业资讯频道!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL中更新修改的数据如果与原始数据相同还会再次执行吗?

用户评论