| 函數 | 取值時機 | 同一陳述式多次呼叫 |
|---|---|---|
NOW() | 陳述式開始執行時 | 回傳相同值(靜態快照) |
SYSDATE() | 函數實際執行時 | 回傳不同時值(動態即時) |
mysql> SELECT NOW(), SLEEP(3), NOW();
+---------------------+----------+---------------------+
| NOW() | SLEEP(3) | NOW() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 | -- 相同
+---------------------+----------+---------------------+
mysql> SELECT SYSDATE(), SLEEP(3), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE() | SLEEP(3) | SYSDATE() |
+---------------------+----------+---------------------+
| 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 | -- 差 3 秒
+---------------------+----------+---------------------+
SYSDATE():Return the time at which the function executes.(回傳函數執行當下的時間)
NOW(),保證同一交易/陳述式內時間一致,符合直覺。SYSDATE()。SYSDATE() 為非確定性函數,binlog_format=STATEMENT 時可能導致主從不一致,建議改用 ROW 格式或避免使用。除非有明確的「即時時間」需求,否則一律使用 NOW(),避免隱性 Bug 與複寫風險。