數據庫幾個涉及到時間的函數用法及區別

MySQL中有5個函數需要計算當前時間的值:
NOW.返回時間,格式如:2012-09-23 06:48:28
CURDATE,返回時間的日期,格式如:2012-09-23
CURTIME,返回時間,格式如:06:48:28
UNIX_TIMESTAMP,返回時間整數戳,如:1348408108
SYSDATE,返回時間,格式和time()函數返回時間一樣,但是有區別。
除了本身定義所返回的區別以外,另一個區別是:前四個函數都是返回基於語句的開始執行時間,而SYSDATE返回time的值。
通過比較,可以發現這兩個函數的區別:
NOW()執行如下:
mysql> select now(),sleep(2),now();
±--------------------±---------±--------------------+
| now() | sleep(2) | now() |
±--------------------±---------±--------------------+
| 2012-09-23 06:54:29 | 0 | 2012-09-23 06:54:29 |
±--------------------±---------±--------------------+
1 row in set (2.00 sec)
其返回的兩個值是一樣的,因爲都是表示語句開始執行的時間。

SYSDATE執行如下:
mysql> select sysdate(),sleep(2),sysdate();
±--------------------±---------±--------------------+
| sysdate() | sleep(2) | sysdate() |
±--------------------±---------±--------------------+
| 2012-09-23 06:55:00 | 0 | 2012-09-23 06:55:02 |
±--------------------±---------±--------------------+
1 row in set (2.01 sec)
也正因爲有這個區別,我們一般在執行語句的時候,都是用NOW(),因爲SYSDATE獲取當時實時的時間,這有可能導致主庫和從庫是執行的返回值是不一樣的,導致主從數據不一致。
其上其它函數執行如下:
mysql> select now(),sysdate(),curdate(),curtime(),unix_timestamp()\G;
*************************** 1. row ***************************
now(): 2012-09-23 07:00:05
sysdate(): 2012-09-23 07:00:05
curdate(): 2012-09-23
curtime(): 07:00:05
unix_timestamp(): 1348408805

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章