Python日記

【MySQL】カラムに更新日時を追加する方法。timestamp設定時の注意点

2020年7月26日

MySQL カラムに更新日時を追加しようの巻
お悩みさん

MySQLのテーブルに更新日時を付け足したい〜

例えば、Webアプリで、最終更新日というような表記がでてくるときがあります。

そんな表記を出すには、MySQLの更新時間を引っ張ってくれば実装ができます。

僕もFlaskを使ってプログラミングをしている際、更新日時の表示をする必要があったため、

timestampのカラムを追加することにしました。

この記事で学べること

  1. カラムに更新日時の追加方法
  2. timestampのチェックすべきこと

環境

OSMac 10.15.4
Pythonpython 3.9
仮想環境Poetry
Homebrew8.0.19 Homebrew

テーブルのカラムを確認

現状のMySQLのテーブルは以下です。

sentenceというテーブルに、idと、poemのカラムを作成しています。

mysql> select * from sentence;
+----+-----------------------------------------------+
| id | poem                                          |
+----+-----------------------------------------------+
|  1 | To be, or not to be: that is the question…1   |
+----+-----------------------------------------------+

続いて、テーブルのカラムをチェックしてみます。

mysql> show columns from sentence;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   | PRI | NULL    |       |
| poem  | text | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+

今回、やりたいことは、【Field:更新日】を追加することです。

alterを使って、カラムの追加

更新日のからを追加する方法は以下のとおりです。

テーブル名の部分を各々のテーブル名に変更してください。

mysql> alter table テーブル名 add updatetime timestamp default current_timestamp on update current_timestamp;

実行できたら、selectでチェックします。

mysql> select * from sentence;
+----+-----------------------------------------------+---------------------+
| id | poem                                          | updatetime          |
+----+-----------------------------------------------+---------------------+
|  1 | To be, or not to be: that is the question…1   | 2020-07-22 02:16:28 |
+----+-----------------------------------------------+---------------------+
解決さん

更新日の追加ができた!

念のため、カラムのFieldも確認してみます。

+------------+-----------+------+-----+-------------------+-----------------------------------------------+
| Field      | Type      | Null | Key | Default           | Extra                                         |
+------------+-----------+------+-----+-------------------+-----------------------------------------------+
| id         | int       | NO   | PRI | NULL              |                                               |
| poem       | text      | YES  |     | NULL              |                                               |
| updatetime | timestamp | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+------------+-----------+------+-----+-------------------+-----------------------------------------------+

問題なさそうです。

ここでのポイントは、

Default → CURRENT_TIMESTAMP

ExtraDEFAULT_GENERATED on update CURRENT_TIMESTAMP

と設定されていることを確認してください。

まとめ

この記事で学んだこと

  1. カラムに更新日時の追加方法
  2. timestampのチェックすべきこと

更新日時のカラムを追加するときは、alterを使います。

それから、timestampのDefault、Extraがしっかり設定されるように注意してください。

ちなみに、こんな簡単なのに、私が初めてやったときは2時間かかってしまいました…。

-Python日記
-