トリガースキーマ(構造)の確認
トリガーがどのようにどのようなCREATE文を使って作成されたのかについて確認する方法について解説します。sqlite_masterテーブルを利用する方法と.schemaコマンドを使用する方法の二通りがあります。
1.sqlite_masterテーブルから取得
2..schemaコマンドを使って取得
テーブルやインデックスを作成した場合と同じように、トリガーを作成した時もどのようなCREATE TRIGGER文が実行されたのかがSQLiteの特別なテーブル「sqlite_master」テーブル内に格納されています。このテーブルのデータを取得することで、どのようなCREATE TRIGGER文が実行されたのか確認することができます。
まず最初はsqlite_masterテーブルを利用する方法です。次のようにSQL文を実行して下さい。
select * from sqlite_master;
次のようなデータが取得できます。(事前に「.mode」コマンドで「mode」を「line」に変更しています)。
sqlite> select * from sqlite_master; type = table name = sqlite_sequence tbl_name = sqlite_sequence rootpage = 3 sql = CREATE TABLE sqlite_sequence(name,seq) type = table name = product tbl_name = product rootpage = 2 sql = CREATE TABLE product(id integer, name text) type = table name = history tbl_name = history rootpage = 4 sql = CREATE TABLE history(username text, productname text, sales integer) type = trigger name = updateproduct tbl_name = product rootpage = 0 sql = CREATE TRIGGER updateproduct update of name on product begin update history set productname = new.name where productname = old.name; end sqlite>
「sqlite_master」テーブルには4つの行が含まれています。この中で上3つはテーブル、最後の1つがトリガーです。「sql」カラムの値を見ることでトリガーがどのようなSQL文で作成されたのかを確認することができます。
先ほどはテーブルとトリガーの情報が混じって表示されました。もしトリガーの情報だけを取得したい場合はWHERE句を使って次のように実行して下さい。
select * from sqlite_master where type = 'trigger';
トリガーだけのデータを取得することができました。
トリガーのスキーマに関する情報だけ取得したい場合にはSQLiteコマンドの「.schema」でも確認することができます。
.schema .schema ?TABLE?
引数を省略すれば全てのテーブルやトリガーのスキーマ情報を表示します。また引数にテーブル名を指定すると、テーブル名に一致するテーブルや指定したテーブル名を対象としたインデックスだけのトリガー情報を表示することができます。
では実際に試してみます。
現在データベースの中に作成されている2つのテーブル及び1つのトリガーに関するCREATE文が表示されました。
( Written by Tatsuo Ikura )