MySQLでタイムスタンプを扱うには?TIMESTAMPデータ型の使い方を解説
MySQLのTIMESTAMPデータ型とは
MySQLにおいて、日付と時刻の両方の情報を含む値を扱う場合には、TIMESTAMPデータ型を使用します。TIMESTAMP型は、レコードの作成日時や更新日時を自動的に記録したい場合に特に便利です。
ここからは、実際にテーブルを作成し、TIMESTAMP型のカラムにデフォルト値として現在の時刻(CURRENT_TIMESTAMP)を設定する手順を順番に見ていきましょう。
1. テーブルを作成する
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable662(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(100),
UserPostDate datetime
);
Query OK, 0 rows affected (0.50 sec)
2. TIMESTAMP型とデフォルト値を設定する
次に、ALTER TABLE文を使ってUserPostDateカラムをTIMESTAMP型に変更し、デフォルト値としてcurrent_timestampを設定します。これにより、レコード挿入時に明示的に日時を指定しなくても、自動的に現在の日時が登録されるようになります。
mysql> alter table DemoTable662 MODIFY COLUMN UserPostDate TIMESTAMP NOT NULL DEFAULT current_timestamp;
Query OK, 0 rows affected (1.81 sec)
Records: 0 Duplicates: 0 Warnings: 0
3. テーブル構造を確認する
DESCコマンドでテーブルの構造を確認してみましょう。
mysql> desc DemoTable662;
実行結果は以下の通りです。UserPostDateカラムがtimestamp型になり、デフォルト値にCURRENT_TIMESTAMPが設定されていることがわかります。
+--------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+-------------------+----------------+
| UserId | int(11) | NO | PRI | NULL | auto_increment |
| UserName | varchar(100) | YES | | NULL | |
| UserPostDate | timestamp | NO | | CURRENT_TIMESTAMP | |
+--------------+--------------+------+-----+-------------------+----------------+
3 rows in set (0.10 sec)
4. レコードを挿入する
INSERT文を使って、いくつかレコードを追加してみます。日時を指定しない場合は現在の日時が、指定した場合はその日時が登録されます。
mysql> insert into DemoTable662(UserName) values('Chris');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable662(UserName) values('Robert');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable662(UserName,UserPostDate) values('Robert','2018-01-11');
Query OK, 1 row affected (0.27 sec)5. 登録されたデータを確認する
SELECT文ですべてのレコードを表示します。
mysql> select *from DemoTable662;
実行結果は以下の通りです。
+--------+----------+---------------------+
| UserId | UserName | UserPostDate |
+--------+----------+---------------------+
| 1 | Chris | 2019-07-20 13:06:13 |
| 2 | Robert | 2019-07-20 13:06:18 |
| 3 | Robert | 2018-01-11 00:00:00 |
+--------+----------+---------------------+
3 rows in set (0.00 sec)
まとめ
MySQLで日付と時刻の両方を扱いたい場合は、TIMESTAMPデータ型を使用します。DEFAULT current_timestampを設定しておけば、INSERT時に日時を省略しても自動的に現在の日時が記録されるため、投稿日時や作成日時の管理に非常に便利です。なお、TIMESTAMP型は2038年問題を抱えているため、それ以降の日時を扱う可能性がある場合はDATETIME型の利用も検討するとよいでしょう。
-
血液型を保存するにはどのMySQLデータ型を使うべき?varcharとENUMの使い分けを解説
血液型を保存するためのMySQLデータ型血液型(BloodType)を保存する場合は、varchar(3) または ENUM 型を使用するのが適しています。血液型は「A+」「A-」「B+」「B-」「AB+」「AB-」「O+」「O-」のように最大3文字で表現できるため、varchar(3)で十分に対応できます。まず、テーブルを作成してみましょう。mysql> create table DemoTable1855 ( BloodType varchar(3) );Query OK, 0 rows affected (0.00 sec)次に、insertコマンドを使ってテーブ
-
MySQLサーバーへの接続に使えるコマンドオプション徹底解説
MySQLサーバーへの接続オプションとはMySQLクライアントプログラムには、サーバーへの接続方法を制御するためのさまざまなコマンドラインオプションが用意されています。これらのオプションを使うことで、接続先のホストやポート番号、認証方式のほか、接続を暗号化するかどうか、圧縮するかどうかといった設定まで細かく指定できます。これらのオプションは、コマンドラインから直接指定できるだけでなく、オプションファイル(my.cnf / my.ini)に記述しておくことも可能です。主な接続関連オプション--default-auth: 使用する認証プラグインを指定します。--host: MySQLサーバーが稼働