MySQL函数now和sysdate使用时的注意事项

1.前言

mysql提供的函数nowsysdate都是用来获取当前的日期和时间。不同的是,now会在sql开始执行时就固定下来,而sysdate会在执行过程中计算。简单说,now是静态的,sysdate是动态的。

2.实验

现在表的初始化情况如下:

在这里插入图片描述

现在db4的test表有10w条记录,其中birthday字段是timestamp类型。

现在对全表进行更新操作,分别使用nowsysdate函数将birthday设置为当前时间。

2.1使用sysdate函数

在这里插入图片描述
sysdate(3)代表获得的时间信息保留3位毫秒

使用sysdate函数更新全表后,发现更新后各行的birthday不是一致的,而是随着一行一行的更新,时间也在增加。这说明了sysdate函数是在执行的过程中解析的

2.2使用now函数

在这里插入图片描述
在这里插入图片描述
使用now函数更新后,发现整个表的birthday字段值都是一样的。这说明now函数不是在执行的过程中一步步生成的(每更新一行,都为这行生成当前的时间),而是在update这个语句最开始执行的时候,now就已经执行并固定下来了,后面随着时间的推移而更新时,now始终不变

3.官网说明

在这里插入图片描述
now在语句开始执行就计算出来了并作为常量,语句中后续用到now的地方都会是相同值。sysdate在执行过程中动态解析

所以可以看到官网的例子中,休眠2s前后,now返回的是相同的值,sysdate返回的是差了2s的值
(吐槽:谷歌自带的翻译怎么这么拉,“这与sysdate()的行为不同”硬是整成了”这与的行为不同sysdate()“)

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值