【MySQL】now()与sysdate()的区别

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模式的复制环境。
参考资料:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22664653/viewspace-752576/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22664653/viewspace-752576/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值