MySQLで特定のテーブルに関連付けられたすべてのトリガーを確認する方法
概要
MySQLでは、INFORMATION_SCHEMA.TRIGGERS テーブルに対してクエリを実行することで、特定のテーブルに関連付けられているすべてのトリガーを簡単に一覧表示できます。データベース名(スキーマ名)と対象テーブル名を条件として指定するだけで、そのテーブルに定義されたトリガーの詳細情報を取得できます。
使用するクエリ
以下のように、TRIGGER_SCHEMA にデータベース名、EVENT_OBJECT_TABLE にテーブル名を指定して検索します。
mysql> Select * from INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA = 'query' AND EVENT_OBJECT_TABLE = 'Student_info'\G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: query
TRIGGER_NAME: studentinfo_after_delete
EVENT_MANIPULATION: DELETE
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: query
EVENT_OBJECT_TABLE: student_info
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: BEGIN
DECLARE vuser varchar(30);
SELECT USER() into vuser;
INSERT INTO student_info_deleted(id,deleted_date,deleted_by) VALUES(OLD.id,SYSDATE(),vuser);
END
ACTION_ORIENTATION: ROW
ACTION_TIMING: AFTER
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: 2017-11-21 14:19:34.91
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
1 row in set (0.00 sec)結果の読み方
上記の実行結果は、データベース「query」内の「student_info」テーブルに定義されているトリガーの情報を示しています。この例では、「studentinfo_after_delete」という名前のトリガーが1件登録されており、DELETE 操作の後に実行される(AFTER DELETE)設定であることがわかります。
トリガーの本体(ACTION_STATEMENT)を見ると、削除されたレコードのIDと実行ユーザー、日時を「student_info_deleted」テーブルに記録する処理が定義されていることが確認できます。
主なカラムの説明
- TRIGGER_NAME: トリガーの名前
- EVENT_MANIPULATION: トリガーが発火するイベントの種類(INSERT / UPDATE / DELETE)
- ACTION_TIMING: 実行タイミング(BEFORE / AFTER)
- ACTION_STATEMENT: トリガーとして実行されるSQL文の本体
- DEFINER: トリガーを作成したユーザー
なお、\G を付けて実行すると、結果が縦方向に整形されて表示されるため、多くのカラムを持つトリガー情報を読みやすく確認できます。
-
【MySQL】単一のUPDATE文でテーブルのすべての列を特定の値に一括設定する方法
MySQLでは、UPDATE文のSET句に「列名=値」をカンマ区切りで並べることで、単一のクエリだけでテーブルの複数の列(実質的にすべての列)を特定の値に同時に設定できます。この記事では、サンプルテーブルを使いながら具体的な手順を解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable ( ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ClientName varchar(40), ClientAge int,
-
MySQLトリガー(TRIGGER)を使ってテーブルに現在の日付を自動挿入する方法
この記事では、MySQLのトリガー(TRIGGER)を使用して、テーブルに現在の日付(DATE)を自動的に挿入する方法を解説します。INSERT文の実行時に日付を指定しなくても、トリガーによって自動的に現在日付が登録される仕組みを見ていきましょう。 サンプルテーブルの作成 まず、以下のクエリでテーブルを作成します。 mysql> create table DemoTable1584-> (-> DueDate datetime-> );Query OK, 0 rows affected (1.79 sec) ここでは、datetime型の「DueDate」カラムを持つテ