MySQL のトリガーの一覧を取得する

ここでは MySQL でデータベース内のトリガーの一覧を取得する方法をご説明します。

SHOW TRIGGERS でトリガーの一覧を取得する

MySQL の SHOW TRIGGERS 文を使うと、データベース内のトリガーの一覧を取得することができます。

SHOW TRIGGERS; とだけ実行すると、今選択されているデータベースのトリガーの一覧を取得できます。

SHOW TRIGGERS;

[実行結果]

MySQL のトリガーの一覧を取得する 1


データベースを指定して、トリガーの一覧を取得したい時は、SHOW TRIGGERS FROM [データベース名] のよう指定することができます。

例えば school_db が選択されている状態で、test データベースのトリガーの一覧を取得したい時は次のようにできます。

SHOW TRIGGERS FROM test;

[実行結果]

MySQL のトリガーの一覧を取得する 2


SHOW TRIGGERS LIKE 'キーワード' のように指定してフィルターすることもできますが、検索の対象はトリガー名ではなく、テーブル名であることに注意してください。

例えば、以下のようにして、trg_students ではじまる名前のトリガーを取得することはできません。

SHOW TRIGGERS LIKE 'trg_students%';

[実行結果]

MySQL のトリガーの一覧を取得する 3


SHOW CREATE TRIGGER でトリガーの定義を取得する

見つけたトリガーの定義を取得したい場合は SHOW CREATE TRIGGER 文が使えます。

トリガーが存在するデータベースを選択して実行します。

例えば、trg_students_log という名前のトリガーの定義を取得したい場合は、次のようにできます。

SHOW CREATE TRIGGER trg_students_log;

[実行結果]

MySQL のトリガーの一覧を取得する 4

結果セットの 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;

[実行結果]

MySQL のトリガーの一覧を取得する 5


データベースを指定するには 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%';

[実行結果]

MySQL のトリガーの一覧を取得する 6

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 などで検索してしまうのがいいと思います。

MySQL のトリガーの一覧を取得する 7


また、トリガーには、ファンクションなどのように、トリガー名を右クリックして [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 でトリガーの一覧を取得する方法ご説明しました。

© 2025 MySQL 入門