MySQL中SYSDATE()和NOW()的差別
[日期:2012-09-24] | 來源:Linux社群 作者:zmxiangde | [字型:大 中 小] |
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
- 1 row in set (0.00 sec)