メモ:MySQLの NOW() と SYSDATE()

 MySQLで、NOW()もSYSDATE()も、大雑把には「現在時刻を返す関数」なのですが、実はその挙動は異なります。
現在時刻とは何か、つきつめると「時間とは何か」という哲学的なテーマになるのですが、ここではそんな難しい話ではなく、さしあたって MySQL では、
 NOW() は、そのクエリ処理が開始した日時
 SYSDATE()は、その関数の処理が行われているまさにその日時
という話をしたいだけです。

mysql> SELECT NOW(), SYSDATE(), SLEEP(3), NOW(), SYSDATE();                                                                   
+---------------------+---------------------+----------+---------------------+---------------------+
| NOW()               | SYSDATE()           | SLEEP(3) | NOW()               | SYSDATE()           |
+---------------------+---------------------+----------+---------------------+---------------------+
| 2020-07-12 11:49:13 | 2020-07-12 11:49:13 |        0 | 2020-07-12 11:49:13 | 2020-07-12 11:49:16 |
+---------------------+---------------------+----------+---------------------+---------------------+
1 row in set (3.00 sec)

 なぜか私は逆に覚えていて(SYSDATEのほうが処理固定だと)、あれっとなったのでメモとしてこの日記を。

 
 時間というのは不思議なもので、その時々に応じて長さが変わります。皆さんも、退屈な30分の授業がなかなか終わらなかったり、逆に、重要な試験の最中に一瞬で2時間が溶けていたり、楽しい飲み会で「さっき20時だったのにもう23時!」なんて経験をしたことがあると思います。きっと、NOW()関数も、夢中になって処理をしてくれているうちに、時間が過ぎていることに気づかなかったのでしょうね。SYSDATEのほうはシステム的に常に冷静に今の時刻を把握していて、さすがだなぁといったところです。


時間とは何か 改訂第2版 (ニュートンムック)

時間とは何か 改訂第2版 (ニュートンムック)

  • 発売日: 2020/07/16
  • メディア: ムック