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

【MySQL】トリガーを使って別のテーブルに行を自動挿入する方法

はじめに:トリガーとは

MySQLのトリガー(TRIGGER)を使うと、あるテーブルに対してINSERT・UPDATE・DELETEなどの操作が行われたときに、自動的に別の処理を実行できます。本記事では、「Table1に行を挿入したら、同じ内容がTable2にも自動的に挿入される」というトリガーの作成手順を具体例とともに解説します。

ステップ1:1つ目のテーブルを作成する

まず、CREATE文を使用してテーブルを作成します。

mysql> create table Table1
   -> (
   -> id int,
   -> name varchar(100)
   -> );
Query OK, 0 rows affected (0.62 sec)

ステップ2:2つ目のテーブルを作成する

続いて、データのコピー先となるもう1つのテーブルを作成します。

mysql> create table Table2
   -> (
   -> id int,
   -> name varchar(100)
   -> );
Query OK, 0 rows affected (0.49 sec)

ステップ3:トリガーを作成する

次のようにしてトリガーを作成します。

mysql> delimiter #
mysql> create trigger Table1Trigger after insert on Table1
   -> for each row
   -> begin
   ->  insert into Table2(id, name) values (new.id, new.name);
   -> end#
Query OK, 0 rows affected (0.29 sec)

mysql> delimiter ;

ポイント:トリガーを作成する際には、あらかじめデリミタ(区切り文字)を変更しておく必要があります。これは、トリガー本体の中でセミコロン(;)がSQL文の終端として解釈されるのを防ぐためです。ここではdelimiter #で一時的に区切り文字を「#」に変更し、トリガー定義が完了したらdelimiter ;で元に戻しています。

また、トリガー内で使用しているnew.idnew.nameは、挿入されたばかりの新しい行の値を参照するための記法です。AFTER INSERTと指定しているため、Table1への挿入が完了したタイミングでトリガーが起動します。

ステップ4:Table1にレコードを挿入してトリガーを発火させる

Table1に行を挿入するとトリガーが起動し、その内容がTable2にも自動的に挿入されます。まずはTable1にレコードを追加してみましょう。

mysql> insert into Table1 values(1,'John'),(2,'Smith'),(3,'Carol');
Query OK, 3 rows affected (0.28 sec)
Records: 3  Duplicates: 0  Warnings: 0

ステップ5:両テーブルの内容を確認する

両方のテーブルにレコードが正しく挿入されたかどうかを確認します。まずはTable1からチェックします。

mysql> select *from Table1;

以下の出力結果から、Table1への挿入が正常に完了したことがわかります。

+------+-------+
| id   | name  |
+------+-------+
|    1 | John  |
|    2 | Smith |
|    3 | Carol |
+------+-------+
3 rows in set (0.00 sec)

次に、2つ目のテーブル(Table2)を確認してみます。

mysql> select *from Table2;

以下の出力結果を見ると、Table2にもまったく同じレコードが自動的に挿入されていることが確認できます。

+------+-------+
| id   | name  |
+------+-------+
|    1 | John  |
|    2 | Smith |
|    3 | Carol |
+------+-------+
3 rows in set (0.00 sec)

まとめ

このように、AFTER INSERTトリガーを活用すれば、あるテーブルへのINSERT操作をきっかけとして、別のテーブルへ同一データを自動的に複製できます。監査ログの記録やテーブル間のデータ同期など、さまざまな用途に応用できる便利な機能なので、ぜひ覚えておきましょう。

  1. MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法

    あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82     -> (     

  2. MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)

    MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi