概述
今天主要介紹一下MySQL 中 時間函數now() current_timestamp() 和 sysdate() 以及三者之間的比較。
now()、current_timestamp() 和 sysdate()
在mysql中有三個時間函數用來獲取當前的時間,分別是now()、current_timestamp() 和 sysdate()
這三個函數都可以獲得當前的時間,例如
select now(),current_timestamp(),sysdate() G
這里看起來是沒有什么不同的,但是翻閱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
在上面這個例子因為人為加入了sleep函數,讓其等待5秒和10秒,可以發現sysdate返回的函數跟其他是不一樣的,究其原因是這3個函數的略微區別:
1) current_timestamp是now的同義詞,也就是兩者是相同的
2)sysdate函數返回執行當前函數的時間,而now返回執行SQL語句時的時間。所以兩次執行sysdate函數返回不同的時間是因為第二次調用執行該函數時等待了前面SLEEP函數5秒,而對于now函數,不管在sleep之前還是之后執行,返回都是執行這條sql語句的時間。