MySQLには、現在時刻を求める関数としてSYSDATE()とNOW()という2つの関数が実装されている。そして、それらは微妙に動作が違う。SYSDATE()は関数が呼び出された瞬間の時刻を返すのに対して、NOW()はクエリ開始時の時刻を返す。例えば、100秒かかるような長いクエリにおいて両者を利用した場合、SYSDATE()では結果に最大100秒の差が生じるのに対して、NOW()では差が生じない。NOW()では関数が最初に実行された時に結果がキャッシュされ、以降はキャッシュされた値が利用されるからだ。 次のようにSLEEP()を利用するとわかり易いだろう。 mysql> SELECT SYSDATE(), SLEEP(100), SYSDATE(); +---------------------+------------+---------------------+ | SYSDATE(
![SYSDATE()とNOW()の違い。](https://cdn-ak-scissors.b.st-hatena.com/image/square/1946584c1109fd113f49a62abe33b19ded268448/height=288;version=1;width=512/https%3A%2F%2Flh6.googleusercontent.com%2F-Om_IligLd5c%2FTTT9MTGM31I%2FAAAAAAAAAfw%2FABg9hRZifTo%2Fs800%2Flogo.png)