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

【MySQL】タイムスタンプを行に自動的に保存する2つの方法

MySQLでは、レコードの作成日時(タイムスタンプ)を自動的に行へ保存できます。実現方法は主に以下の2つです。

  • 方法1:テーブル作成時にDEFAULT CURRENT_TIMESTAMPを指定する
  • 方法2:ALTER文を使って既存テーブルに列を後から追加する

方法1:テーブル作成時にタイムスタンプを設定する

テーブルを作成する際に、対象の列に対してdatetime default current_timestampを指定します。基本の構文は次のとおりです。

CREATE TABLE yourTableName
(
yourDateTimeColumnName datetime default current_timestamp
);

実際にテーブルを作成してみましょう。

mysql> create table CurrentTimeStampDemo
-> (
-> CreationDate datetime default current_timestamp
-> );
Query OK, 0 rows affected (0.61 sec)

この設定を行うと、「CreationDate」列に値を渡さなかった場合でも、MySQLがデフォルトで現在のタイムスタンプを自動的に保存します。

INSERT文でレコードを挿入してみます。

mysql> insert into CurrentTimeStampDemo values();
Query OK, 1 row affected (0.12 sec)

続いて、SELECT文ですべてのレコードを表示して確認しましょう。

mysql> select * from CurrentTimeStampDemo;

出力結果は以下のとおりです。

+---------------------+
| CreationDate |
+---------------------+
| 2019-01-02 15:53:03 |
+---------------------+
1 row in set (0.00 sec)

INSERT時に何も値を指定していないにもかかわらず、現在の日時である「2019-01-02 15:53:03」が自動的に記録されていることがわかります。

方法2:ALTER文で既存テーブルにタイムスタンプ列を追加する

すでに存在するテーブルに、作成日時を自動保存する列を後から追加したい場合は、ALTERコマンドを使用します。

まず、通常のテーブルを作成します。

mysql> create table Current_TimestampDemo
-> (
-> Id int
-> );
Query OK, 0 rows affected (0.43 sec)

次に、ALTER文でタイムスタンプを自動保存する列を追加します。

mysql> ALTER TABLE Current_TimestampDemo
-> ADD CreationDate datetime DEFAULT CURRENT_TIMESTAMP;
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0

これで、「CreationDate」列に値を渡さなければ、MySQLがその列に現在の日時を自動的に保存するようになります。

INSERT文でレコードを挿入してみます。

mysql> insert into Current_TimestampDemo(Id) values(1);
Query OK, 1 row affected (0.19 sec)

SELECT文で結果を確認しましょう。

mysql> select CreationDate from Current_TimestampDemo;

出力結果は以下のとおりです。

+---------------------+
| CreationDate |
+---------------------+
| 2019-01-02 16:25:12 |
+---------------------+
1 row in set (0.00 sec)

補足:DATETIME型とTIMESTAMP型の違い

作成日時の保存にはDATETIME型以外にTIMESTAMP型も使えます。両者の主な違いは以下のとおりです。

  • TIMESTAMP型:UTC基準で保存され、タイムゾーンの影響を受ける。保存可能範囲は「1970-01-01〜2038年」まで。
  • DATETIME型:タイムゾーンの影響を受けず、範囲は「1000-01-01〜9999-12-31」と広い。

また、レコードの更新日時を自動的に記録したい場合は、ON UPDATE CURRENT_TIMESTAMPを組み合わせると便利です。

ALTER TABLE yourTableName
ADD UpdatedAt datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

まとめ

  • 新規テーブルなら、CREATE TABLE内でDEFAULT CURRENT_TIMESTAMPを指定するだけでOK。
  • 既存テーブルには、ALTER TABLE ... ADD ... DEFAULT CURRENT_TIMESTAMPで列を追加できる。
  • どちらの場合も、INSERT時に値を省略すれば現在日時が自動保存される。
  1. MySQLでテーブルを動的に作成する方法(ストアドプロシージャ活用)

    MySQLでテーブルを動的に作成したい場合は、ストアドプロシージャを利用するのが便利です。この記事では、StudentId(int型)とStudentName(varchar型)の2つのカラムを持つテーブルを、任意のテーブル名で動的に生成する手順を解説します。 ストアドプロシージャの作成 まず、テーブル名を引数として受け取り、動的にCREATE TABLE文を組み立てて実行するストアドプロシージャを作成します。 mysql> DELIMITER $$ mysql> CREATE PROCEDURE creatingDynamicTableDemo(yourTableName VAR

  2. MySQLでタイムスタンプを月に変換するクエリの書き方

    タイムスタンプを月に変換する基本構文MySQLでタイムスタンプ(UNIXタイムスタンプ)を月に変換するには、FROM_UNIXTIME()関数とMONTH()関数を組み合わせて使用します。基本的な構文は以下の通りです。select month(from_unixtime(yourColumnName)) from yourTableName;FROM_UNIXTIME()関数がUNIXタイムスタンプを日時形式に変換し、その結果に対してMONTH()関数を適用することで、月の数値(1〜12)を取得できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> cr