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

INSERTコマンド実行時にトリガーでMySQLテーブルを自動更新する方法

MySQLでは、あるテーブルへのINSERT操作をきっかけに、別のテーブルへ自動的にデータを挿入・更新する処理を「トリガー(TRIGGER)」を使って実現できます。本記事では、実際のSQL例を通じて、INSERTコマンド実行時に別テーブルを更新するトリガーの作成手順をわかりやすく解説します。

1. 最初のテーブルを作成する

まず、データの挿入先となる最初のテーブル「DemoTable1」を作成します。

mysql> create table DemoTable1
    -> (
    -> Id int,
    -> FirstName varchar(20)
    -> );
Query OK, 0 rows affected (0.52 sec)

2. 2つ目のテーブルを作成する

次に、トリガーの起点となる2つ目のテーブル「DemoTable2」を作成します。

mysql> create table DemoTable2
    -> (
    -> EmployeeId int,
    -> EmployeeName varchar(20)
    -> );
Query OK, 0 rows affected (0.51 sec)

3. INSERT時に動作するトリガーを作成する

ここがポイントです。「DemoTable2」にレコードが挿入された直後(AFTER INSERT)に、「DemoTable1」へ自動的にレコードを追加するトリガー「updateDemoOnInsert」を作成します。ストアドプログラム内でセミコロンを使用するため、あらかじめDELIMITERを変更しておきます。

mysql> DELIMITER //
mysql> CREATE TRIGGER updateDemoOnInsert
    -> AFTER INSERT ON DemoTable2
    -> FOR EACH ROW BEGIN
    -> insert into DemoTable1 values(110,'Adam');
    -> END
    -> //
Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;

4. レコードを挿入してトリガーを発火させる

INSERTコマンドを使って「DemoTable2」にレコードを追加します。この挿入操作がトリガーを起動します。

mysql> insert into DemoTable2 values(101,'Mike');
Query OK, 1 row affected (0.22 sec)

5. 2つ目のテーブルの内容を確認する

SELECT文で「DemoTable2」の全レコードを表示します。

mysql> select * from DemoTable2;

実行結果は以下のとおりです。

+------------+--------------+
| EmployeeId | EmployeeName |
+------------+--------------+
|        101 | Mike         |
+------------+--------------+
1 row in set (0.00 sec)

6. 最初のテーブルの内容を確認する

続いて、SELECT文で「DemoTable1」の全レコードを表示します。

mysql> select * from DemoTable1;

すると、以下のように「DemoTable2」へのINSERTをきっかけに、トリガーによって自動的にレコードが挿入されていることが確認できます。

+------+-----------+
| Id   | FirstName |
+------+-----------+
|  110 | Adam      |
+------+-----------+
1 row in set (0.00 sec)

まとめ

このように、AFTER INSERTトリガーを利用すれば、あるテーブルへのデータ挿入を契機として、別のテーブルへ自動的にレコードを追加・更新できます。監査ログの記録や関連テーブルの同期など、さまざまな場面で活用できる便利な機能なので、ぜひ覚えておきましょう。

  1. Javaを使ってMySQLテーブルにレコードを挿入する方法

    はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable(   Id int,   Name varchar(30),&

  2. JavaでMySQLテーブルに1つのカラムのみを挿入する方法

    JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m