MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのNOW()とSYSDATE()の違いとは?実行時刻の挙動をわかりやすく解説

MySQLにおけるNOW()とSYSDATE()の基本的な違い

MySQLには、現在の日付と時刻(タイムスタンプ)を取得するための関数として、NOW()SYSDATE()の2つが用意されています。どちらも一見同じように見えますが、実際の出力結果はステートメントの実行タイミングによって大きく異なります。この違いを理解することは、正確な時刻処理を行う上で非常に重要です。

NOW()の特徴:ステートメント開始時刻を返す

NOW()関数は、そのステートメントが実行を開始した時点の時刻を返します。つまり、クエリの実行中に時間が経過しても、常に同じ値(一定の時刻)を返すのが特徴です。

一方、SYSDATE()関数は、そのステートメントが実際に実行された瞬間の時刻を返します。そのため、実行中に時間が経過すれば、それに応じた最新の時刻が返されます。

NOW()の動作を確認するサンプル

以下の例では、SLEEP(5)を使って5秒間処理を停止させ、前後でNOW()の戻り値を比較しています。

mysql> Select NOW(), SLEEP(5), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(5) | NOW()               |
+---------------------+----------+---------------------+
| 2017-10-31 09:57:36 | 0        | 2017-10-31 09:57:36 |
+---------------------+----------+---------------------+
1 row in set (5.11 sec)

この結果を見ると、システムが5秒間スリープしたにもかかわらず、最初と最後のNOW()まったく同じ時刻を返しています。これは、NOW()が「ステートメントの実行開始時刻」を基準としているためです。

SYSDATE()の動作を確認するサンプル

次に、同じ条件でSYSDATE()を実行してみます。

mysql> Select SYSDATE(), SLEEP(5), SYSDATE();

+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(5) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2017-10-31 09:58:13 | 0        | 2017-10-31 09:58:18 |
+---------------------+----------+---------------------+
1 row in set (5.00 sec)

こちらの結果では、5秒間のスリープ後に実行された2回目のSYSDATE()は、最初の値からちょうど5秒進んだ時刻(09:58:18)を返しています。これが、SYSDATE()が「実際に実行された瞬間の時刻」を返すことの証明です。

使い分けのポイント

  • NOW():トランザクションやログ記録など、同一ステートメント内で一貫した時刻が必要な場合に適しています。
  • SYSDATE():バッチ処理の経過時間計測など、リアルタイムの現在時刻が必要な場合に適しています。

なお、レプリケーション環境ではSYSDATE()はマスターとスレーブで異なる時刻を返す可能性があるため、注意して使用してください。この点でも、通常はNOW()の方が安全な選択と言えます。

  1. MySQLのTINYINT(1)とブール型(BOOLEAN)の違いとは?

    結論から言うと、TINYINT(1)とブール型(BOOLEAN)の間に違いはありません。MySQLでは、BOOLまたはBOOLEANというキーワードは内部的にTINYINT(1)へと変換されます。つまり、BOOLやBOOLEANはTINYINT(1)の別名(シノニム)として扱われるのです。それでは、実際にテーブルを作成して確認してみましょう。BOOLEAN型でテーブルを作成するmysql> create table DemoTable ( isMarried Boolean ); Query OK, 0 rows affected (1.77 sec)次に、作成したテーブルの構造

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (