MySQL中SYSDATE()和NOW()的區別
MySQL中有5個函數需要計算當前時間的值:
NOW.返回時間,格式如:2012-09-23 06:48:28
CURDATE,返回時間的日期,格式如:2012-09-23
CURTIME,返回時間,格式如:06:48:28
UNIX_TIMESTAMP,返回時間整數戳,如:1348408108
SYSDATE,返回時間,格式和time()函數返回時間一樣,但是有區別。
除了本身定義所返回的區別以外,另一個區別是:前四個函數都是返回基於語句的開始執行時間,而SYSDATE返回time的值。
通過比較,可以發現這兩個函數的區別:
www.2cto.com
NOW()執行如下:
[sql]
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)
其返回的兩個值是一樣的,因為都是表示語句開始執行的時間。
www.2cto.com
SYSDATE執行如下:
[sql]
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獲取當時實時的時間,這有可能導致主庫和從庫是執行的返回值是不一樣的,導致主從數據不一致。
www.2cto.com
其上其它函數執行如下:
[sql]
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)