MySQL のトリガーの一覧を取得する
ここでは MySQL でデータベース内のトリガーの一覧を取得する方法をご説明します。
SHOW TRIGGERS でトリガーの一覧を取得する
MySQL の SHOW TRIGGERS 文を使うと、データベース内のトリガーの一覧を取得することができます。
SHOW TRIGGERS; とだけ実行すると、今選択されているデータベースのトリガーの一覧を取得できます。
SHOW TRIGGERS;
[実行結果]
データベースを指定して、トリガーの一覧を取得したい時は、SHOW TRIGGERS FROM [データベース名] のよう指定することができます。
例えば school_db が選択されている状態で、test データベースのトリガーの一覧を取得したい時は次のようにできます。
SHOW TRIGGERS FROM test;
[実行結果]
SHOW TRIGGERS LIKE 'キーワード' のように指定してフィルターすることもできますが、検索の対象はトリガー名ではなく、テーブル名であることに注意してください。
例えば、以下のようにして、trg_students ではじまる名前のトリガーを取得することはできません。
SHOW TRIGGERS LIKE 'trg_students%';
[実行結果]
SHOW CREATE TRIGGER でトリガーの定義を取得する
見つけたトリガーの定義を取得したい場合は SHOW CREATE TRIGGER 文が使えます。
トリガーが存在するデータベースを選択して実行します。
例えば、trg_students_log という名前のトリガーの定義を取得したい場合は、次のようにできます。
SHOW CREATE TRIGGER trg_students_log;
[実行結果]
結果セットの SQL Original Statement カラムにトリガーの定義があります。
CREATE DEFINER=`root`@`localhost` TRIGGER `trg_students_log` AFTER UPDATE ON `students` FOR EACH ROW BEGIN
IF OLD.student_number <> NEW.student_number THEN
INSERT INTO student_number_log (
student_id,
student_number_from,
student_number_to,
updated_on
)
VALUES (
NEW.student_id,
OLD.student_number,
NEW.student_number,
NOW()
);
END IF;
END
INFORMATION_SCHEMA.TRIGGERS でトリガーの一覧を取得する
MySQL の INFORMATION_SCHEMA.TRIGGERS システムビューからも、トリガーの一覧を取得することができます。
INFORMATION_SCHEMA.TRIGGERS は、sys データベースも含め、全データベースのトリガーを返します。
SELECT *
FROM INFORMATION_SCHEMA.TRIGGERS;
[実行結果]
データベースを指定するには TRIGGER_SCHEMA = 'データベース名' のようにフィルターします。
トリガー名でフィルターするには、TRIGGER_NAME カラムを使ってフィルターできます。
例えば、INFORMATION_SCHEMA.TRIGGERS から school_db データベースの、名前に log というキーワードが含まれるトリガーを取得するには次のようにできます。
SELECT *
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA = 'school_db'
AND TRIGGER_NAME LIKE '%log%';
[実行結果]
school_db データベースの trg_students_log トリガーの情報が取得できています。
INFORMATION_SCHEMA.TRIGGERS の ACTION_STATEMENT カラムにも トリガーの処理部分 (BEGIN 〜 END) が格納されていますが、SHOW CREATE TRIGGER のほうが完全な構文に近いです。
BEGIN
IF OLD.student_number <> NEW.student_number THEN
INSERT INTO student_number_log (
student_id,
student_number_from,
student_number_to,
updated_on
)
VALUES (
NEW.student_id,
OLD.student_number,
NEW.student_number,
NOW()
);
END IF;
END
MySQL Workbench でトリガーを確認する
MySQL Workbench の Schema タブの [Database] > [Tables] > [Table] > [Triggers] でも、トリガーを確認することができます。
データベースとテーブルがわかっていないと、各テーブルの Triggers を開いてみるしかないので、INFORMATION_SCHEMA.TRIGGERS などで検索してしまうのがいいと思います。
また、トリガーには、ファンクションなどのように、トリガー名を右クリックして [Alter ...] のような機能はありません。
トリガーを変更しなければならない時は、SHOW CREATE TRIGGER で定義を取得して、変更し、以下のように一度トリガーを削除して再生成する必要があります。
DROP TRIGGER IF EXISTS trg_students_log;
DELIMITER //
CREATE TRIGGER trg_students_log
AFTER UPDATE
ON students FOR EACH ROW
BEGIN
...
END//
DELIMITER ;
以上、MySQL でトリガーの一覧を取得する方法ご説明しました。