flaskとMySQLの接続を引き続き、継続中です。
flaskで、更新日時の表示をする必要があったため、
timestampのカラムを追加することにしました。
環境
Mac 10.15.4
Server version: 8.0.19 Homebrew
現状
現状のデータベースはこんな感じです。
mysql> select * from sentence;
+----+-----------------------------------------------+
| id | poem |
+----+-----------------------------------------------+
| 1 | To be, or not to be: that is the question…1 |
+----+-----------------------------------------------+
やりたいことは、【Field:更新日】を追加することです。
mysql> show columns from sentence;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| poem | text | YES | | NULL | |
+-------+------+------+-----+---------+-------+
alterでカラムの追加
記述は以下のとおりです。
【sentence】の部分をそれぞれのテーブル名に変更してください。
mysql> alter table 【sentence】 add updatetime timestamp default current_timestamp on update current_timestamp;
OKがでたので、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がしっかり設定されるように注意してください。
こんな簡単なのに、私は解決するまでに2時間くらいかけてしいまいました…。