zoukankan      html  css  js  c++  java
  • 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: 修改回话参数的操作不会被记录到二进制文件中。

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

  • 相关阅读:
    Terminologies in MVC: Part 2 (Razor Engine Syntax vs Web Form)
    what is diff. b/w app state & session state
    ASP.NET Web Pages (Razor) FAQ
    _AppStart.cshtml 和 _PageStart.cshtml的妙用
    系统编程--信号
    系统编程--进程间通信
    系统编程--进程
    系统编程--标准IO
    系统编程--文件IO
    网络--路由表&IP选路
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10384848.html
Copyright © 2011-2022 走看看