MySQL データベース ビュー トリガーと MySQL 変更および削除トリガー (DROP TRIGGER)

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 データベースの基礎スキルの完全演習icon-default.png?t=N7T8https://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データベース実習icon-default.png?t=N7T8https://edu.csdn.net/course/detail/39021

おすすめ

転載: blog.csdn.net/m0_37449634/article/details/135553763