MySQLビュートリガー
トリガーの表示とは、データベースにすでに存在するトリガーの定義、ステータス、および構文情報を表示することを指します。MySQL でトリガーを表示する方法には、SHOW TRIGGERS ステートメントと、information_schema データベースの下のトリガー データ テーブルのクエリが含まれます。このセクションでは、トリガーを表示する両方の方法について詳しく説明します。
トリガー情報を表示する SHOW TRIGGERS ステートメント
MySQL では、SHOW TRIGGERS ステートメントを使用してトリガーの基本情報を表示できます。構文形式は次のとおりです。
SHOW TRIGGERS;
例1
まずデータ テーブル アカウントを作成し、テーブルには INT 型の accnum と DECIMAL 型の amount の 2 つのフィールドがあります。SQL ステートメントと実行結果は次のとおりです。
mysql> CREATE TABLE account(
-> accnum INT(4),
-> amount DECIMAL(10,2));
Query OK, 0 rows affected (0.49 sec)
trigupdate という名前のトリガーを作成し、account テーブルがデータを更新するたびに myevent データ テーブルにデータを挿入します。データ テーブル myeven を作成するための SQL ステートメントと実行結果は次のとおりです。
mysql> CREATE TABLE myevent(
-> id INT(11) DEFAULT NULL,
-> evtname CHAR(20) DEFAULT NULL);
Query OK, 0 rows affected (0.26 sec)
trigupdate トリガーを作成する SQL コードは次のとおりです。
mysql> CREATE TRIGGER trigupdate AFTER UPDATE ON account
-> FOR EACH ROW INSERT INTO myevent VALUES(1,'after update');
Query OK, 0 rows affected (0.15 sec)
SHOW TRIGGERS ステートメントを使用してトリガーを表示します (SHOW TRIGGERS コマンドの後に追加する\G
と、表示される情報がより整理されます)。SQL ステートメントと実行結果は次のとおりです。
mysql> SHOW TRIGGERS \G
*************************** 1. row ***************************
Trigger: trigupdate
Event: UPDATE
Table: account
Statement: INSERT INTO myevent VALUES(1,'after update')
Timing: AFTER
Created: 2020-02-24 14:07:15.08
sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Definer: root@localhost
character_set_client: gbk
collation_connection: gbk_chinese_ci
Database Collation: latin1_swedish_ci
1 row in set (0.09 sec)
実行結果からトリガーの基本情報を確認できます。上記表示情報の説明は以下のとおりです。
- Trigger はトリガーの名前を表します。ここではトリガーの名前は trigupdate です。
- Event はトリガーをアクティブにするイベントを表します。ここでのトリガー イベントは更新操作 UPDATE です。
- テーブルは、アクティブ化されたトリガーの操作オブジェクト テーブルを表します。ここではアカウント テーブルです。
- ステートメントはトリガーによって実行される操作を表します。ここでは、データの一部を myevent データ テーブルに挿入します。
- タイミングはトリガーが起動された時間を表します。ここでは更新操作後 (AFTER) です。
- トリガーの作成時間、SQL モード、トリガー定義アカウントと文字セットなど、その他の情報もありますが、ここでは 1 つずつ紹介しません。
Mysql データベースの基礎スキルの完全演習https://edu.csdn.net/course/detail/36210
SHOW TRIGGERS ステートメントは、現在作成されているすべてのトリガーの情報を表示するために使用されます。このステートメントは指定されたトリガーをクエリできないため、トリガーが少ない場合にこのステートメントを使用すると便利です。特定のトリガーに関する情報を表示したい場合、またはデータベース内に多数のトリガーがある場合は、information_schema データベースのトリガー データ テーブルから直接検索できます。
トリガーテーブルのトリガー情報を表示する
MySQL では、すべてのトリガー情報は information_schema データベースのトリガー テーブルに保存され、クエリ コマンド SELECT を通じて表示できます。具体的な構文は次のとおりです。
SELECT * FROM information_schema.triggers WHERE trigger_name= '触发器名';
このうち、'触发器名'
表示するトリガーの名前を指定するために使用され、一重引用符で囲む必要があります。このメソッドは、指定されたトリガーをクエリできるため、より便利で柔軟に使用できます。
例 2
trigupdate トリガーを表示するには、以下の SELECT コマンドを使用します。SQL ステートメントは次のとおりです。
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME= 'trigupdate'\G
上記のコマンドは、WHERE を使用して、表示する必要があるトリガーの名前を指定します。実行結果は次のとおりです。
mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME= 'trigupdate'\G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: test
TRIGGER_NAME: trigupdate
EVENT_MANIPULATION: UPDATE
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: test
EVENT_OBJECT_TABLE: account
ACTION_ORDER: 1
ACTION_CONDITION: NULL
ACTION_STATEMENT: INSERT INTO myevent VALUES(1,'after update')
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: 2020-02-24 16:07:15.08
SQL_MODE: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
DEFINER: root@localhost
CHARACTER_SET_CLIENT: gbk
COLLATION_CONNECTION: gbk_chinese_ci
DATABASE_COLLATION: latin1_swedish_ci
1 row in set (0.22 sec)
実行結果からトリガーの詳細情報を確認できます。上記表示情報の説明は以下のとおりです。
- TRIGGER_SCHEMA は、トリガーが配置されているデータベースを示します。
- TRIGGER_NAME はトリガーの名前を表します。
- EVENT_OBJECT_TABLE は、どのデータテーブルでトリガーされるかを示します。
- ACTION_STATEMENT は、トリガーが起動されたときに実行される特定の操作を表します。
- ACTION_ORIENTATION の値は ROW です。これは、すべてのレコードでトリガーされることを意味します。
- ACTION_TIMING は、トリガーの瞬間が AFTER であることを示します。
- トリガーの作成時間、SQL モード、トリガー定義アカウントと文字セットなど、その他の情報もありますが、ここでは 1 つずつ紹介しません。
上記の SQL ステートメントはトリガー名を指定できないため、すべてのトリガーが表示されます。SQL ステートメントは次のとおりです。
SELECT * FROM information_schema.triggers \G
このステートメントは、トリガー データ テーブル内のすべてのトリガー情報を表示します。
MySQL の変更および削除トリガー (DROP TRIGGER)
トリガーを変更するには、元のトリガーを削除し、同じ名前で新しいトリガーを作成します。
基本的な文法
他の MySQL データベース オブジェクトと同様に、トリガーは DROP ステートメントを使用してデータベースから削除できます。
構文形式は次のとおりです。
DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名>
構文は次のように説明されます。
1) トリガー名
削除するトリガーの名前。
2) データベース名
オプション。トリガーが存在するデータベースの名前を指定します。指定しない場合、それが現在のデフォルトのデータベースになります。
3) 権限
DROP TRIGGER ステートメントを実行するには、SUPER 権限が必要です。
4) 存在する場合
オプション。トリガーなしでトリガーを削除することは避けてください。
注意:删除一个表的同时,也会自动删除该表上的触发器。另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,再重新创建。
トリガーの削除
MySQL で定義されているトリガーを削除するには、DROP TRIGGER ステートメントを使用します。
【例】double_salaryトリガーを削除する 入力SQL文と実行処理は以下のとおりです。
mysql> DROP TRIGGER double_salary;
Query OK, 0 rows affected (0.03 sec)
double_salary トリガーを削除した後、データ テーブル tb_emp6 にレコードを再度挿入すると、以下に示すように、データ テーブル tb_emp7 のデータは変更されなくなります。
mysql> INSERT INTO tb_emp6
-> VALUES (3,'C',1,200);
Query OK, 1 row affected (0.09 sec)
mysql> SELECT * FROM tb_emp6;
+----+------+--------+--------+
| id | name | deptId | salary |
+----+------+--------+--------+
| 1 | A | 1 | 1000 |
| 2 | B | 1 | 500 |
| 3 | C | 1 | 200 |
+----+------+--------+--------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM tb_emp7;
+----+------+--------+--------+
| id | name | deptId | salary |
+----+------+--------+--------+
| 1 | A | 1 | 2000 |
| 2 | B | 1 | 1000 |
+----+------+--------+--------+
2 rows in set (0.00 sec)
大昌上級データベースエンジニアmysqlデータベース実習https://edu.csdn.net/course/detail/39021