SQLiteを学んでいこうという連載の19回目です。前回の記事はこちらになります。
前回は、複数のデータベースの取り扱いについてご紹介しました。複数のデータベース間でやり取りができると、データベースの使い方の幅が広がります。
今回はSQLiteの機能の1つであるトリガーです。いったいどんな機能なのでしょうか?
トリガー機能
トリガー機能とはSQL文で特定のテーブルが更新された際に、別のSQL文を自動的に実行するという機能です。実際の使用例を見ていきましょう。
データ追加時の記録を取る
データベースファイルにデータを登録した際に、別のテーブルに登録の記録を取るようにしてみましょう。 以下の手順でテーブルを作成します。
sqlite> CREATE TABLE sample(id INTEGER,name TEXT,age INTEGER); sqlite> INSERT INTO sample VALUES(1,"TANAKA",25); sqlite> INSERT INTO sample VALUES(2,"YAMADA",30); sqlite> INSERT INTO sample VALUES(3,"OOTA",27);
また、記録を取るためのテーブルも用意します。
sqlite> CREATE TABLE log_table(timestamp TEXT,id INTEGER);
次にトリガー機能を設定します。
sqlite> CREATE TRIGGER insert_data ...> AFTER INSERT ON sample ...> FOR EACH ROW ...> BEGIN ...> INSERT INTO log_table(timestamp, id) VALUES(datetime('now'),NEW.id); ...> END;
この時点でのデータベースの状態を確認してみましょう。
sqlite> .mode line sqlite> SELECT * FROM sqlite_master; type = table name = sample tbl_name = sample rootpage = 2 sql = CREATE TABLE sample(id INTEGER,name TEXT,age INTEGER) type = table name = log_table tbl_name = log_table rootpage = 3 sql = CREATE TABLE log_table(timestamp TEXT,id INTEGER) type = trigger name = insert_data tbl_name = sample rootpage = 0 sql = CREATE TRIGGER insert_data AFTER INSERT ON sample FOR EACH ROW BEGIN INSERT INTO log_table(timestamp, id) VALUES(datetime('now'),NEW.id); END
2つのテーブルのほかに「type = trigger」として「insert_data」が作成されています。これが追加設定されたトリガー機能です。 この状態で以下のSQLを実行して、テーブル「sample」にレコードを追加してみましょう。
sqlite> INSERT INTO sample VALUES(4,"SASAKI",31);
実行後にそれぞれのテーブル内容を確認してみます。
sqlite> .mode qbox sqlite> SELECT * FROM sample; ┌────┬──────────┬─────┐ │ id │ name │ age │ ├────┼──────────┼─────┤ │ 1 │ 'TANAKA' │ 25 │ │ 2 │ 'YAMADA' │ 30 │ │ 3 │ 'OOTA' │ 27 │ │ 4 │ 'SASAKI' │ 31 │ └────┴──────────┴─────┘ sqlite> SELECT * FROM log_table; ┌───────────────────────┬────┐ │ timestamp │ id │ ├───────────────────────┼────┤ │ '2023-07-30 07:21:33' │ 4 │ └───────────────────────┴────┘
「sample」にはレコードが追加され、「log_table」にはデータを追加した日時と追加したidが記録されています。 この様にトリガー機能を使用すると、データ変更(追記)時に記録を取ることができます。
次回は解説
いかがでしょうか。トリガー機能は結構便利そうですね。次回は今回の内容の解説です。また、その他の使い方についてもご紹介したいと思います。お楽しみに!!