MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでDEFAULT CURRENT_TIMESTAMPとON UPDATE CURRENT_TIMESTAMPを設定する方法

MySQLのDEFAULT CURRENT_TIMESTAMPとON UPDATE CURRENT_TIMESTAMPとは

MySQLでは、カラムにDEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMPを指定することで、以下のような動作を実現できます。

  • DEFAULT CURRENT_TIMESTAMP: レコード挿入時に値が指定されなかった場合、自動的に現在の日時(タイムスタンプ)がデフォルト値として設定されます。
  • ON UPDATE CURRENT_TIMESTAMP: レコードが更新されるたびに、そのカラムの値が自動的に現在の日時に更新されます。

この機能は、レコードの作成日時や最終更新日時を自動的に管理したい場合に非常に便利です。実際に例を見ながら、テーブルを作成してみましょう。

サンプルテーブルの作成

まず、学生情報を管理するテーブルを作成します。

mysql> create table DemoTable737 (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName varchar(100),
    StudentAdmissiondate datetime
);
Query OK, 0 rows affected (0.68 sec)

ここで注意すべき点は、日付用のカラムを一旦 datetime 型で作成していることです。DEFAULT CURRENT_TIMESTAMP を適用するには、後ほど timestamp 型に変更します。

CURRENT_TIMESTAMPの設定クエリ

次に、ALTER TABLE文を使って、StudentAdmissiondate カラムに DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP を設定します。

mysql> alter table DemoTable737 modify column StudentAdmissiondate 
timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
Query OK, 0 rows affected (2.20 sec)
Records: 0 Duplicates: 0 Warnings: 0

このクエリにより、カラムの型が datetime から timestamp に変更されると同時に、デフォルト値と自動更新の設定が適用されます。

テーブル構造の確認

DESCコマンドを使って、変更後のテーブル構造を確認してみましょう。

mysql> desc DemoTable737;

実行すると、次のような出力が得られます。

+----------------------+--------------+------+-----+-------------------+-----------------------------+
| Field                | Type         | Null | Key | Default           | Extra                       |
+----------------------+--------------+------+-----+-------------------+-----------------------------+
| StudentId            | int(11)      | NO   | PRI | NULL              | auto_increment              |
| StudentName          | varchar(100) | YES  |     | NULL              |                             |
| StudentAdmissiondate | timestamp    | YES  |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+----------------------+--------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.01 sec)

結果のポイント

出力結果から、StudentAdmissiondate カラムには以下の設定が反映されていることがわかります。

  • Type: timestamp 型に変更されています。
  • Default: CURRENT_TIMESTAMP が設定されており、INSERT時に現在日時が自動的に登録されます。
  • Extra: on update CURRENT_TIMESTAMP が設定されており、UPDATE時に現在日時へ自動更新されます。

なお、MySQL 5.6.5以降では、DATETIME 型のカラムにも DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP を直接指定できるようになったため、古いバージョンのように型を timestamp に変更する必要はありません。プロジェクトで使用しているMySQLのバージョンに応じて、適切な方法を選択してください。

  1. MySQLで論理AND演算子を使ってUPDATE文を実行する方法

    MySQLで特定の条件を満たす行だけを更新したい場合、UPDATE文のWHERE句に論理AND演算子(AND)を組み合わせることで実現できます。複数の条件をすべて満たすレコードのみを対象に更新できるため、より精密なデータ操作が可能になります。ここでは、実際にサンプルテーブルを作成し、AND演算子を使ったUPDATE文の動作を順番に確認していきましょう。1. サンプルテーブルの作成まず、学生情報を格納するテーブルを作成します。mysql> create table DemoTable1616    -> (   &

  2. MySQLでカスタム変数を使ってテーブルを更新する方法【実例付き】

    MySQLでは、ユーザー定義変数(カスタム変数)を活用することで、UPDATE文の実行時に値を動的に変化させながらレコードを更新できます。本記事では、実際のコード例を通じて、カスタム変数を使った更新クエリの書き方をわかりやすく解説します。1. サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable2027 -> ( -> UserId int -> );Query OK, 0 rows affected (0.65 sec)2. テストデータの挿入次に、INSERT文を使ってサンプルデー