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トリガーを利用すれば、あるテーブルへのデータ挿入を契機として、別のテーブルへ自動的にレコードを追加・更新できます。監査ログの記録や関連テーブルの同期など、さまざまな場面で活用できる便利な機能なので、ぜひ覚えておきましょう。
-
Javaを使ってMySQLテーブルにレコードを挿入する方法
はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable( Id int, Name varchar(30),&
-
JavaでMySQLテーブルに1つのカラムのみを挿入する方法
JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m