天天看點

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的值。

通過比較,可以發現這兩個函數的差別:

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中SYSDATE()和NOW()函數的差別和聯系

繼續閱讀