Web制作、Web開発の歩き方

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

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

(最終更新日:2024.11.06)

データベースのイメージ
この記事は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)

5.まとめ

データベース管理では、データの作成日時と更新日時を追跡するcreated_atとupdated_atフィールドが不可欠だ。 これらはデータの変更履歴を明確にし、データ管理を効率化する。 MySQLでは、これらのフィールドを設定する方法が提供されており、SQLのCREATE TABLEで正しく命令すれば、 データ挿入や更新時に日時が自動的に記録されるようになる。 ぜひ、この機能を活用して、効率的なデータ管理を行おう。

▼参考図書、サイト

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