トリガースキーマ(構造)の確認
トリガーがどのようにどのような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 )
DBOnline