MySQL中update修改数据与原数据相同是否会再次执行
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,小编给大家分享一下MySQL中update修改数据与原数据相同是否会再次执行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
千家信息网最后更新 2025年02月04日MySQL中update修改数据与原数据相同是否会再次执行
小编给大家分享一下MySQL中update修改数据与原数据相同是否会再次执行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
本文主要测试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 12090390Log flushed up to 12090390Pages flushed up to 12090390Last checkpoint at 120903810 pending log flushes, 0 pending chkp writes33 log i/o's done, 0.00 log i/o's/second*************************** 1. row *************************** File: mysql-bin.000001 Position: 154 Binlog_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 12091486Log flushed up to 12091486Pages flushed up to 12091486Last checkpoint at 120914770 pending log flushes, 0 pending chkp writes39 log i/o's done, 0.00 log i/o's/second*************************** 1. row *************************** File: mysql-bin.000001 Position: 500 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:11 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 12091486Log flushed up to 12091486Pages flushed up to 12091486Last checkpoint at 120914770 pending log flushes, 0 pending chkp writes39 log i/o's done, 0.00 log i/o's/second*************************** 1. row *************************** File: mysql-bin.000001 Position: 500 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:11 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 12092582Log flushed up to 12092582Pages flushed up to 12092582Last checkpoint at 120925730 pending log flushes, 0 pending chkp writes45 log i/o's done, 0.00 log i/o's/second*************************** 1. row *************************** File: mysql-bin.000001 Position: 154 Binlog_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 12093678Log flushed up to 12093678Pages flushed up to 12093678Last checkpoint at 120936690 pending log flushes, 0 pending chkp writes51 log i/o's done, 0.14 log i/o's/second*************************** 1. row *************************** File: mysql-bin.000001 Position: 438 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:11 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 12094504Log flushed up to 12094504Pages flushed up to 12094504Last checkpoint at 120944950 pending log flushes, 0 pending chkp writes56 log i/o's done, 0.00 log i/o's/second*************************** 1. row *************************** File: mysql-bin.000001 Position: 438 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:11 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)
以上是MySQL中update修改数据与原数据相同是否会再次执行的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
数据
相同
测试
再次
内容
参数
引擎
步骤
篇文章
语句
不怎么
大部分
字段
接口
时候
更多
环境
知识
行业
资讯
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
公安民警网络安全九不准
网络安全报考学校
网络安全管理 责任意识
长春醋仙网络技术有限公司
uplay服务器目前不可用
数据库删除表中的一个信息
服务器光口支持热插拔吗
万常选版数据库第十章
澳洲网络安全厉害吗
数据库开发学习心得
基于对抗网络技术
微信消息服务器
搭建svn服务器
学生电脑室网络安全制度
中卫展厅多媒体软件开发
电商网络技术的知识点
浙江推广网络技术参考价格
linux数据库 权限
滴滴道路数据库 谣言
数据库还原是还原什么格式的
互联网科技与法律行业相结合
山东电商软件开发服务
互联网 未来科技岛
胡素冉网络安全法观后感
nio http服务器
网络安全竞赛CTF解题模式
英灵神殿换电脑服务器
软件开发工程师的主要任务
衡水软件开发公司厂家价格
金蝶数据库类型