zoukankan      html  css  js  c++  java
  • now()与sysdate()的区别(1)

     
     
    now()与sysdate()两个函数都以'YYYY-MM-DD HH:MM:SS'的形式表示表示当前的时间。比如:
    root@rac1 21:13:10> select sysdate();                   
    +---------------------+
    | sysdate()           |
    +---------------------+
    | 2013-01-12 21:14:21 |
    +---------------------+
    1 row in set (0.00 sec)
     
    root@rac1 21:14:21> select now();    
    +---------------------+
    | now()               |
    +---------------------+
    | 2013-01-12 21:14:29 |
    +---------------------+
    1 row in set (0.00 sec)
    两者的区别在于对于一个语句中调用多个函数
    NOW()     返回语句调用时的值,在存过或者trigger 中now()返回的值是存过或者trigger 执行的时刻的时间。
    SYSDATE() 返回调用该函数的时刻的时间值。
    举例说明两者之间的区别:
    root@rac1 21:07:16> select now(),sleep(3),now(); -返回的时间是一致的。  
    +---------------------+----------+---------------------+
    | now()               | sleep(3) | now()               |
    +---------------------+----------+---------------------+
    | 2013-01-12 21:07:30 |        0 | 2013-01-12 21:07:30 |
    +---------------------+----------+---------------------+
    1 row in set (3.00 sec)
     
    root@rac1 21:10:23> select sysdate(),sleep(2),sysdate();       
    +---------------------+----------+---------------------+
    | sysdate()           | sleep(2) | sysdate()           |
    +---------------------+----------+---------------------+
    | 2013-01-12 21:11:06 |        0 | 2013-01-12 21:11:08 |
    +---------------------+----------+---------------------+
    上述查询返回sysdate()函数被调用的时刻的时间值。
    还有另外一个时间相关的函数current_timestamp() 与now()一致。
    root@rac1 21:07:33> select now(),current_timestamp(),sysdate();
    +---------------------+---------------------+---------------------+
    | now()               | current_timestamp() | sysdate()           |
    +---------------------+---------------------+---------------------+
    | 2013-01-12 21:09:59 | 2013-01-12 21:09:59 | 2013-01-12 21:09:59 |
    +---------------------+---------------------+---------------------+
    1 row in set (0.00 sec)
    root@rac1 21:10:08> select now(),sleep(2),current_timestamp(); 
    +---------------------+----------+---------------------+
    | now()               | sleep(2) | current_timestamp() |
    +---------------------+----------+---------------------+
    | 2013-01-12 21:10:21 |        0 | 2013-01-12 21:10:21 |
    +---------------------+----------+---------------------+
    1 row in set (2.00 sec)
     
    当sysdate函数在基于satement 模式的主从环境下可能造成数据的不一致。因为语句在主库中执行到日志传递到备库,存在时间差,到备库执行的时候就会变成不同的时间值。
    解决方法:
    1 通过设置sysdate-is-now参数,使mysql对于sysdate调用采用和now一样的行为,配置该参数的时候要在主备同事配置。
    2 采取row模式的复制环境。
    参考资料:
     
     
  • 相关阅读:
    514.栅栏染色
    OOM的起点到终点
    OOM的起点到终点
    2019 Android 高级面试题总结 从java语言到AIDL使用与原理 ...
    2019 Android 高级面试题总结 从java语言到AIDL使用与原理 ...
    Vue 结合 echarts 原生 html5 实现拖拽排版报表系统
    Vue 结合 echarts 原生 html5 实现拖拽排版报表系统
    Python一行代码获得IP地址
    Python一行代码获得IP地址
    记一次Pinpoint监控工具部署过程
  • 原文地址:https://www.cnblogs.com/l10n/p/7518422.html
Copyright © 2011-2022 走看看