MySQL Binlog与数据变更

如果对满足WHERE条件数据执行UPDATE,而UPDATE未导致前后数据发生变化,这种情况下会产生二进制日志么?

=========================================================================================

ROW格式下测试:

##修改日志格式
SET SESSION binlog_format='ROW';


##查看数据
SELECT * FROM t3 WHERE i1=1;
+----+------+------+------------------+
| i1 | i2   | f    | t                |
+----+------+------+------------------+
|  1 |    1 |    1 | New Hello World1 |
+----+------+------+------------------+


##更新数据
UPDATE t3 SET f=1 WHERE i1=1;
##Query OK, 0 rows affected (0.01 sec)
##Rows matched: 1  Changed: 0  Warnings: 0

使用mysqlbinlog查看日志,会发现没有对应上面update的二进制日志生成。

=========================================================================================

STATEMENT格式下进行测试:

##修改日志格式
SET SESSION binlog_format='STATEMENT';


##更新数据
UPDATE t3 SET f=1 WHERE i1=1;
##Query OK, 0 rows affected (0.01 sec)
##Rows matched: 1  Changed: 0  Warnings: 0

查看二进制日志,会发现有以下信息:

=========================================================================================

总结:

对于未导致数据发生变化的UPDATE操作:

1、ROW格式下无行记录辩护因此不会记录到二进制日志中

2、STATEMENT格式下UPDATE语句会被记录到二进制日志中

3、MIX格式下,上面的UPDATE被当做STATEMENT格式处理

PS1: 修改回话参数的操作不会被记录到二进制文件中。

=========================================================================================

原文地址:https://www.cnblogs.com/gaogao67/p/10384848.html