MySQLデータベース内のすべてのトリガーを一覧表示する方法
MySQLデータベースに登録されているすべてのトリガーを確認したい場合、主に2つの方法があります。SHOW TRIGGERS コマンドを使う方法と、information_schema の TRIGGERS テーブルを参照する方法です。それぞれの手順と出力例を見ていきましょう。
方法1:SHOW TRIGGERS コマンドを使う
最もシンプルなのが SHOW TRIGGERS コマンドです。現在接続しているデータベースに定義されているトリガーの一覧を取得できます。
mysql> show triggers;
実行すると、以下のような結果が出力されます。
+----------------+--------+----------------------+--------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+ | Trigger | Event | Table | Statement | Timing | Created | sql_mode | Definer | character_set_client | collation_connection | Database Collation | +----------------+--------+----------------------+--------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+ | binsertTrigger | INSERT | functiontriggersdemo | SET new.Id = uuid() | BEFORE | 2018-10-16 13:36:09.86 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | cp850 | cp850_general_ci | utf8mb4_unicode_ci | | Table1Trigger | INSERT | table1 | begin insert into Table2(id, name) values (new.id, new.name); end | AFTER | 2018-10-23 10:51:31.76 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | cp850 | cp850_general_ci | utf8mb4_unicode_ci | | insertBef | INSERT | tblfunctiontrigger | SET new.id = uuid() | BEFORE | 2018-10-16 13:44:10.93 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@% | cp850 | cp850_general_ci | utf8mb4_unicode_ci | +----------------+--------+----------------------+--------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+ 3 rows in set (0.13 sec)
このコマンドでは、各トリガーについて以下の情報が確認できます。
- Trigger:トリガー名
- Event:トリガーの発火イベント(INSERT、UPDATE、DELETEなど)
- Table:トリガーが紐づいているテーブル名
- Statement:トリガー実行時の処理内容
- Timing:発火タイミング(BEFORE/AFTER)
- Created:作成日時
- sql_mode / Definer / 文字コード関連情報
方法2:information_schema.TRIGGERS テーブルを参照する
より柔軟にトリガー情報を取得したい場合は、information_schema.triggers テーブルに対してSELECT文を実行します。必要なカラムだけを選択したり、WHERE句で絞り込みを行ったりできるのが利点です。
mysql> select trigger_schema, trigger_name, action_statement -> from information_schema.triggers;
実行結果は以下のとおりです。
+----------------+----------------------------+-------------------------------------------------------------------------------------------------------------------+ | TRIGGER_SCHEMA | TRIGGER_NAME | ACTION_STATEMENT | +----------------+----------------------------+-------------------------------------------------------------------------------------------------------------------+ | sys | sys_config_insert_set_user | BEGIN IF @sys.ignore_sys_config_triggers != true AND NEW.set_by IS NULL THEN SET NEW.set_by = USER(); END IF; END | | sys | sys_config_update_set_user | BEGIN IF @sys.ignore_sys_config_triggers != true AND NEW.set_by IS NULL THEN SET NEW.set_by = USER(); END IF; END | | business | binsertTrigger | SET new.Id = uuid() | | business | insertBef | SET new.id = uuid() | | business | Table1Trigger | begin insert into Table2(id, name) values (new.id, new.name);end | +----------------+----------------------------+-------------------------------------------------------------------------------------------------------------------+ 5 rows in set (0.00 sec)
SHOW TRIGGERS との大きな違いとして、この方法では trigger_schema(データベース名) が表示されるため、サーバー全体の複数データベースにまたがるトリガーを一括で確認できます。特定のデータベースだけを対象にしたい場合は、次のようにWHERE句で条件を指定します。
SELECT trigger_name, action_timing, event_manipulation, action_statement FROM information_schema.triggers WHERE trigger_schema = 'business';
注意点:MySQLのバージョン要件
information_schema.triggers を利用するには、MySQL 5.0.10 以上が必要です。本記事の出力例は MySQL 8.0.12 で検証したものですが、それ以降のバージョンでも同様に動作します。
まとめ
- 手軽に確認するなら
SHOW TRIGGERS;一覧表示はこれだけでOK。 - 詳細な条件指定や他データベース横断の確認には
information_schema.triggersへのSELECTが便利。 - 運用・保守の場面では、トリガーの定義内容を定期的に把握しておくことで、予期しないデータ更新の原因調査がスムーズになります。
-
MySQLで現在選択中のデータベースを確認する方法|DATABASE()関数とstatusコマンドの使い方
MySQLに接続している際、「今どのデータベースを選択しているのか」を確認したい場面はよくあります。この記事では、DATABASE()関数やstatusコマンドを使って、現在選択中のデータベース名を簡単に確認する方法を解説します。 DATABASE()関数で選択中のデータベースを確認する MySQLでは、DUALテーブルに対してDATABASE()関数を実行することで、現在選択されているデータベース名を取得できます。 手順1:データベースを選択する まず、例として「business」というデータベースを選択してみましょう。以下のコマンドを実行します。 mysql> use busi
-
MySQLコマンドラインでデータベースを作成する方法を初心者向けに解説
MySQLコマンドラインでデータベースを作成する手順 この記事では、WindowsのコマンドプロンプトからMySQLに接続し、データベースを作成する一連の手順をスクリーンショット付きで解説します。初心者の方でも迷わず進められるよう、順番に見ていきましょう。 1. コマンドプロンプトを開く まず、コマンドプロンプトを起動します。キーボードのショートカット「Windows + R」キーを押すと、「ファイル名を指定して実行」ダイアログが表示されます。 2. 「CMD」と入力してOKをクリック 表示された入力欄に CMD と入力し、「OK」ボタンをクリックしてください。 3. コマンドプロンプトが