MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLですべてのトリガー一覧と現在のデータベースのトリガーを確認する方法

MySQLのトリガーを取得する方法

MySQLでトリガーを管理する際、サーバー内に存在するすべてのトリガーを確認したいケースや、現在接続しているデータベースに限定してトリガーを確認したいケースがあります。それぞれの方法を解説します。

すべてのトリガーを取得する方法

MySQLサーバー上のすべてのトリガーを取得するには、information_schema.triggers テーブルを参照します。基本構文は以下の通りです。

SELECT trigger_schema, trigger_name FROM information_schema.triggers;

このクエリを実行すると、トリガーが属するスキーマ(データベース)名とトリガー名の一覧を取得できます。

mysql> SELECT trigger_schema, trigger_name FROM information_schema.triggers;

実行結果は以下のようになります。

+----------------+---------------------------------+
| TRIGGER_SCHEMA | TRIGGER_NAME                    |
+----------------+---------------------------------+
| sys            | sys_config_insert_set_user      |
| sys            | sys_config_update_set_user      |
| business       | binsertTrigger                  |
| business       | insertBef                       |
| business       | Table1Trigger                   |
| test           | insertingTrigger                |
| sample         | InsertPrevent_TriggerDemo       |
| sample         | InsertPreventTrigger            |
| sample         | before_Client_insert            |
| sample         | enforce_phone_check             |
| sample         | default_current_year            |
| sample         | restrictUpdateDemo              |
| web            | lowerCaseOnInsertDemo           |
| web            | preventing_to_insert_zero_value |
+----------------+---------------------------------+
14 rows in set (0.00 sec)

このように、複数のデータベース(sys、business、test、sample、webなど)にまたがって存在するすべてのトリガーを一度に確認できます。

現在のデータベースのみのトリガーを取得する方法

現在接続しているデータベースに定義されているトリガーだけを確認したい場合は、SHOW TRIGGERS ステートメントを使用します。

例として、カレントデータベースを「web」に切り替えてからトリガーを表示してみましょう。

mysql> USE web;
Database changed
mysql> SHOW TRIGGERS;

実行結果は以下の通りです。

+---------------------------------+--------+--------------+-----------------------------------------------------------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
| Trigger                         | Event  | Table        | Statement                                                                                                                   | Timing | Created                | sql_mode                                   | Definer | character_set_client | collation_connection | Database Collation |
+---------------------------------+--------+--------------+-----------------------------------------------------------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
| lowerCaseOnInsertDemo           | INSERT | demotable222 | SET NEW.StudentSubject = LOWER(NEW.StudentSubject)                                                                          | BEFORE | 2019-06-01 15:53:09.29 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@%  | utf8                 | utf8_general_ci      | utf8_unicode_ci    |
| preventing_to_insert_zero_value | INSERT | DemoTable    | begin
if(new.Value = 0) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You can not provide 0 value';
END if;
end          | BEFORE | 2019-07-07 18:03:41.65 | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | root@%  | utf8                 | utf8_general_ci      | utf8_unicode_ci    |
+---------------------------------+--------+--------------+-----------------------------------------------------------------------------------------------------------------------------+--------+------------------------+--------------------------------------------+---------+----------------------+----------------------+--------------------+
2 rows in set (0.00 sec)

SHOW TRIGGERS を使うと、トリガー名だけでなく、対象テーブル、イベント種別(INSERT/UPDATE/DELETE)、実行タイミング(BEFORE/AFTER)、トリガーの本体となるステートメント、作成日時、文字コードなどの詳細情報も合わせて確認できます。現在のデータベースに限定した詳細なトリガー情報が必要な場合に便利です。

まとめ

  • サーバー全体のトリガー一覧: information_schema.triggers を SELECT する
  • 現在のデータベースのトリガー詳細: SHOW TRIGGERS を実行する

用途に応じてこれら2つの方法を使い分けることで、MySQLのトリガーを効率的に管理できます。

  1. PythonでMySQLデータベースへの挿入後にIDを取得する方法

    はじめに PythonからMySQLデータベースへレコードを挿入する際、「今挿入したばかりのレコードのID(AUTO_INCREMENTで自動採番された値)をすぐに取得したい」というケースは非常によくあります。本記事では、pymysqlライブラリを使ってMySQLにデータを挿入し、その直後にIDを取得する具体的な手順を解説します。 前提条件 作業を始める前に、以下の環境が整っていることを確認してください。 MySQL 8.0.12 がインストールされていること Python 3.6.3(32ビット) がインストールされていること pipコマンドで pymysql がインストールされているこ

  2. MySQLで現在のデータベース名を指定してデータベースを削除する方法

    MySQLでは、DROP DATABASE文を使うことでデータベースを削除できます。ここでは、現在接続中のデータベース名を動的に取得し、そのデータベース自身を削除する手順を解説します。1. 現在のデータベース名を取得する現在選択されているデータベース名を確認するには、SELECT DATABASE()を使用します。select database();2. 削除クエリを動的に組み立てる構文現在のデータベース名をユーザー変数に格納し、CONCAT()で削除用のSQL文を組み立て、プリペアドステートメントとして実行します。基本的な構文は以下のとおりです。set @anyVariableName =