MySQLのINFORMATION_SCHEMAを使って特定データベースのトリガー詳細情報を取得する方法
はじめに
MySQLでは、標準SQLで定義されているINFORMATION_SCHEMAデータベースを利用することで、テーブルやビュー、ストアドプロシージャなど、データベース内の各種オブジェクトのメタ情報を取得できます。トリガー(TRIGGER)に関する詳細情報も同様に、INFORMATION_SCHEMA.TRIGGERSテーブルを参照することで確認可能です。
基本構文
特定のデータベース(スキーマ)に登録されたトリガーの詳細を取得するには、次のようにWHERE句でTRIGGER_SCHEMAを絞り込んでクエリを実行します。
SELECT * FROM information_schema.triggers WHERE information_schema.triggers.trigger_schema LIKE '%database_name%';
より正確に検索したい場合は、LIKEではなく=を使って完全一致で指定することもできます。
SELECT * FROM information_schema.triggers WHERE trigger_schema = 'query';
実行例
以下は、「query」という名前のデータベースに登録されているトリガー情報を取得した実行例です。出力を見やすくするために\Gオプションを使用しています。
mysql> SELECT * FROM information_schema.triggers WHERE
-> information_schema.triggers.trigger_schema LIKE '%query%'\G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: query
TRIGGER_NAME: trigger_before_delete_sample
EVENT_MANIPULATION: DELETE
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: query
EVENT_OBJECT_TABLE: sample
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: BEGIN
SET @count = if (@count IS NULL, 1, (@count+1));
INSERT INTO sample_rowaffected values (@count);
END
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: 2017-11-21 12:31:58.70
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
DEFINER: root@localhost
CHARACTER_SET_CLIENT: cp850
COLLATION_CONNECTION: cp850_general_ci
DATABASE_COLLATION: latin1_swedish_ci
*************************** 2. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: query
TRIGGER_NAME: before_inser_studentage
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: query
EVENT_OBJECT_TABLE: student_age
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: IF NEW.age < 0 THEN SET NEW.age = 0;
END IF
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: 2017-11-21 11:26:15.34
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
DEFINER: root@localhost
CHARACTER_SET_CLIENT: cp850
COLLATION_CONNECTION: cp850_general_ci
DATABASE_COLLATION: latin1_swedish_ci
2 rows in set (0.03 sec)主なカラムの意味
取得結果には多くのカラムが含まれますが、特に把握しておくと便利な主なカラムは以下の通りです。
- TRIGGER_NAME: トリガーの名前
- EVENT_MANIPULATION: トリガーが発火するイベント(INSERT / UPDATE / DELETE)
- ACTION_TIMING: 発火のタイミング(BEFORE / AFTER)
- EVENT_OBJECT_TABLE: トリガーが設定されているテーブル名
- ACTION_STATEMENT: トリガーが実行する実際のステートメント(本体)
- DEFINER: トリガーを作成したユーザー
補足:SHOW TRIGGERSとの使い分け
同様の情報はSHOW TRIGGERS FROM データベース名;でも取得できます。ただし、INFORMATION_SCHEMA.TRIGGERSを直接参照する方法には、次のような利点があります。
WHERE句による柔軟な条件指定が可能- 必要なカラムだけを
SELECTで絞り込める - 他のテーブルと結合(JOIN)して応用的な分析ができる
このように、INFORMATION_SCHEMA.TRIGGERSを活用すれば、特定データベースに存在するすべてのトリガーの定義内容や発火条件、作成者などの詳細情報を効率よく確認できます。
-
PythonのBoto3ライブラリでAWS Glueクローラーの詳細情報を取得する方法
はじめにこの記事では、Pythonのboto3ライブラリを使用して、AWS Glueの特定のクローラーの詳細情報を取得する方法を解説します。課題 − Pythonでboto3ライブラリを使い、クローラーの詳細情報を取得します。例 − 「crawler_for_s3_file_job」という名前のクローラーの詳細を取得します。解決のためのアプローチと手順ステップ1 − boto3とbotocoreの例外処理用モジュール(exceptions)をインポートし、例外を適切にハンドリングできるようにします。ステップ2 − crawler_nameは必須パラメータです。文字列型のため、一度に指定できるク
-
Boto3を使って複数のトリガーの詳細を一括取得する方法
課題Pythonのboto3ライブラリを使用して、AWSアカウント内で利用可能なトリガーの一覧を取得し、それぞれのトリガーの詳細なメタデータを一度に取得する方法を解説します。アプローチとアルゴリズムステップ1 − 例外処理のために、boto3とbotocore.exceptions(ClientError)をインポートします。ステップ2 − この操作には特別なパラメータは不要です。ユーザーアカウントに登録されているすべてのトリガーを取得し、各トリガーのメタデータを表示できます。ステップ3 − boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルにregion_nam