Web制作、Web開発の歩き方

サーバー、データベース、インフラに関するトピックス

■第4話:created at、updated atを使おう(データベース)

(最終更新日:2023.01.05)

データベースのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「記録が残ってて助かった~」

データベースを扱っているとデータの履歴を追う関係で、「いつ作成したか」「いつ更新したか」を確認したい時がある。 そんな時に活躍するのが、created_atとupdated_atだ。 今回はデータベースのカラム設定、created_atとupdated_atについて説明する。


1.なぜ、記録するか

作成と更新の記録をする理由を例を挙げて説明する。 例えば商品tableに商品を入力した際、作成日が分かれば、いつその商品をリリースしたのかが予測がつく。 また、その商品の価格を変更した場合、更新日があれば価格改定日を調べることができる。 他にも、Aというデータ変更とBというデータ変更をほぼ同時に行う必要があった際、時刻を見れば同時に処理されてることが確認できる。 このように、作成日と更新日の記録はあれば何を行ったかの確認の手助けとなる。


2.created_atとupdated_atを設定しない場合

「 created_at」と「updated_at」は、基本的には設定した方がいい。ただし、設定しなくて良いケースもある。 変更が少ないマスタ系のデータベーステーブルだ。(マスタ系とは、最初から値が入っているような基礎となるTableである。 社員名と社員番号を記録した社員情報Tableなどがそれにあたる。) ただし、そんなマスタ系でも基本は設定した方が良いと思っている。 例えば、殆ど変更のない社員情報Tableにしても「苗字を変更した」場合はupdateがあると助かるし、 中途社員の場合はcreateがあると、何月頃入社したかが分かる。 あって困ることは無いので、迷ったら付けるようにしよう。

3.MySQLでの設定方法

次にMySQLでの「created_at」と「updated_at」の設定方法を説明する。 まずは、「CREATE TABLE」で以下のような新しいTable(new_table)を作成する。その際、「created_at」はDEFAULTでCURRENT TIMESTAMPを指定する。 「updated_at」はDEFAULTでCURRENT TIMESTAMP ON UPDATE CURRENT_TIMESTAMPを指定する。 あとは、INSERT、UPDATEした際に勝手にこのカラムに日時が入力されるようになる。

テーブル作成のSQL

MySQLでのcreated_atとupdated_atの設定

例えば、INSERTでnew_tableにデータを2つ入力する。

データ挿入のSQL

データの入力(INSERT)

すると、Tableにはこのようにデータがが挿入される。そして、確かに「created_at」と「updated_at」にデータを入れた日時が登録されている。

データ挿入

挿入されたデータ

下記のようなSQLで、id=2のデータだけ更新する。

データ更新のSQL

データの更新(UPDATE)

確かにcreated_atの日時も更新されていることが確認できた。

データ更新

データの更新(UPDATE)

4.Djangoにおける設定方法

LaravelとRailsはデフォルトで 「 created_at」と「updated_at」が作成される。 しかし、Djangoの場合は自分でカラムを作成する必要がある。そのやり方を下記に示す。 Modelのclassで、created_atは「DateTimeField」にauto_now_addをTrueにする、updated_atはauto_nowをTrueにする。 これでMySQLに直接SQLで指定した場合と同様のデータベースTableが作成される。

djangoでの設定

データの更新(UPDATE)

▼参考図書、サイト

   マスタテーブルとはいったい何か?そして特徴について知ろう!!  Power BI
   MySQLのテーブルにレコード作成時刻や更新時刻を自動で記録する列を作る  Qiita