【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時に値を省略すれば現在日時が自動保存される。
-
MySQLでテーブルを動的に作成する方法(ストアドプロシージャ活用)
MySQLでテーブルを動的に作成したい場合は、ストアドプロシージャを利用するのが便利です。この記事では、StudentId(int型)とStudentName(varchar型)の2つのカラムを持つテーブルを、任意のテーブル名で動的に生成する手順を解説します。 ストアドプロシージャの作成 まず、テーブル名を引数として受け取り、動的にCREATE TABLE文を組み立てて実行するストアドプロシージャを作成します。 mysql> DELIMITER $$ mysql> CREATE PROCEDURE creatingDynamicTableDemo(yourTableName VAR
-
MySQLでタイムスタンプを月に変換するクエリの書き方
タイムスタンプを月に変換する基本構文MySQLでタイムスタンプ(UNIXタイムスタンプ)を月に変換するには、FROM_UNIXTIME()関数とMONTH()関数を組み合わせて使用します。基本的な構文は以下の通りです。select month(from_unixtime(yourColumnName)) from yourTableName;FROM_UNIXTIME()関数がUNIXタイムスタンプを日時形式に変換し、その結果に対してMONTH()関数を適用することで、月の数値(1〜12)を取得できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> cr