天天看點

Mysql中的時間sysdate(),now()等MySQL中SYSDATE()和NOW()的差別

MySQL中SYSDATE()和NOW()的差別

[日期:2012-09-24] 來源:Linux社群  作者:zmxiangde [字型:大 中 小]

MySQL中有5個函數需要計算目前時間的值:

  1. NOW.傳回時間,格式如:2012-09-23 06:48:28
  2. CURDATE,傳回時間的日期,格式如:2012-09-23
  3. CURTIME,傳回時間,格式如:06:48:28
  4. UNIX_TIMESTAMP,傳回時間整數戳,如:1348408108
  5. SYSDATE,傳回時間,格式和time()函數傳回時間一樣,但是有差別。

除了本身定義所傳回的差別以外,另一個差別是:前四個函數都是傳回基于語句的開始執行時間,而SYSDATE傳回time的值。

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

NOW()執行如下:

  1. mysql> select now(),sleep(2),now();  
  2. +---------------------+----------+---------------------+   
  3. | now()               | sleep(2) | now()               |  
  4. +---------------------+----------+---------------------+   
  5. | 2012-09-23 06:54:29 |        0 | 2012-09-23 06:54:29 |   
  6. +---------------------+----------+---------------------+   
  7. 1 row in set (2.00 sec)  

其傳回的兩個值是一樣的,因為都是表示語句開始執行的時間。

SYSDATE執行如下:

  1. mysql> select sysdate(),sleep(2),sysdate();  
  2. +---------------------+----------+---------------------+   
  3. | sysdate()           | sleep(2) | sysdate()           |  
  4. +---------------------+----------+---------------------+   
  5. | 2012-09-23 06:55:00 |        0 | 2012-09-23 06:55:02 |   
  6. +---------------------+----------+---------------------+   
  7. 1 row in set (2.01 sec)  

也正因為有這個差別,我們一般在執行語句的時候,都是用NOW(),因為SYSDATE擷取當時實時的時間,這有可能導緻主庫和從庫是執行的傳回值是不一樣的,導緻主從資料不一緻。

其上其它函數執行如下:

  1. mysql> select now(),sysdate(),curdate(),curtime(),unix_timestamp()\G;  
  2. *************************** 1. row ***************************  
  3.            now(): 2012-09-23 07:00:05  
  4.        sysdate(): 2012-09-23 07:00:05  
  5.        curdate(): 2012-09-23  
  6.        curtime(): 07:00:05  
  7. unix_timestamp(): 1348408805  
  8. 1 row in set (0.00 sec)  

繼續閱讀