お悩みさん
MySQLのテーブルに更新日時を付け足したい〜
例えば、Webアプリで、最終更新日というような表記がでてくるときがあります。
そんな表記を出すには、MySQLの更新時間を引っ張ってくれば実装ができます。
僕もFlaskを使ってプログラミングをしている際、更新日時の表示をする必要があったため、
timestampのカラムを追加することにしました。
この記事で学べること
- カラムに更新日時の追加方法
- timestampのチェックすべきこと
環境
OS | Mac 10.15.4 |
Python | python 3.9 |
仮想環境 | Poetry |
Homebrew | 8.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
Extra → DEFAULT_GENERATED on update CURRENT_TIMESTAMP
と設定されていることを確認してください。
まとめ
更新日時のカラムを追加するときは、alterを使います。
それから、timestampのDefault、Extraがしっかり設定されるように注意してください。
ちなみに、こんな簡単なのに、私が初めてやったときは2時間かかってしまいました…。
コメント