mysql中time的数据类型选择(详解mysql三大时间函数now)

概述

今天主要介绍一下mysql 中 时间函数now() current_timestamp() 和 sysdate() 以及三者之间的比较。


now()、current_timestamp() 和 sysdate()

在mysql中有三个时间函数用来获取当前的时间,分别是now()、current_timestamp() 和 sysdate()

这三个函数都可以获得当前的时间,例如

select now(),current_timestamp(),sysdate() \G

mysql中time的数据类型选择(详解mysql三大时间函数now)(1)

这里看起来是没有什么不同的,但是翻阅mysql官方的文档可以发现

CURRENT_TIMESTAMP and CURRENT_TIMESTAMP() are synonyms for NOW().

也就是说 CURRENT_TIMESTAMP和 CURRENT_TIMESTAMP()都是 NOW()这个函数的同义词,所以作用是一致的,而sysdate()函数的解释是

SYSDATE() returns the time at which it executes. This differs from the behavior for NOW(), which returns a constant time that indicates the time at which the statement began to execute. (Within a stored function or trigger, NOW() returns the time at which the function or triggering statement began to execute.)

简单来说,now()(current_timestamp())函数获得的是语句开始执行时的时间,而sysdate()函数是这个函数执行时候的时间。


实例

使用sleep()函数延时,预期结果是延时前后now()函数对应的时间不变,sysdate()的时间等于之前的时间加上延时时间

select now(),current_timestamp(),sysdate(), sleep(5), now(),current_timestamp(),sysdate(), sleep(10), now(),current_timestamp(),sysdate() \G

mysql中time的数据类型选择(详解mysql三大时间函数now)(2)

在上面这个例子因为人为加入了sleep函数,让其等待5秒和10秒,可以发现sysdate返回的函数跟其他是不一样的,究其原因是这3个函数的略微区别:

1) current_timestamp是now的同义词,也就是两者是相同的

2)sysdate函数返回执行当前函数的时间,而now返回执行sql语句时的时间。所以两次执行sysdate函数返回不同的时间是因为第二次调用执行该函数时等待了前面SLEEP函数5秒,而对于now函数,不管在sleep之前还是之后执行,返回都是执行这条sql语句的时间。


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

mysql中time的数据类型选择(详解mysql三大时间函数now)(3)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页