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のトリガーを効率的に管理できます。
-
PythonでMySQLデータベースへの挿入後にIDを取得する方法
はじめに PythonからMySQLデータベースへレコードを挿入する際、「今挿入したばかりのレコードのID(AUTO_INCREMENTで自動採番された値)をすぐに取得したい」というケースは非常によくあります。本記事では、pymysqlライブラリを使ってMySQLにデータを挿入し、その直後にIDを取得する具体的な手順を解説します。 前提条件 作業を始める前に、以下の環境が整っていることを確認してください。 MySQL 8.0.12 がインストールされていること Python 3.6.3(32ビット) がインストールされていること pipコマンドで pymysql がインストールされているこ
-
MySQLで現在のデータベース名を指定してデータベースを削除する方法
MySQLでは、DROP DATABASE文を使うことでデータベースを削除できます。ここでは、現在接続中のデータベース名を動的に取得し、そのデータベース自身を削除する手順を解説します。1. 現在のデータベース名を取得する現在選択されているデータベース名を確認するには、SELECT DATABASE()を使用します。select database();2. 削除クエリを動的に組み立てる構文現在のデータベース名をユーザー変数に格納し、CONCAT()で削除用のSQL文を組み立て、プリペアドステートメントとして実行します。基本的な構文は以下のとおりです。set @anyVariableName =