Триггеры просмотра базы данных MySQL и триггеры изменения и удаления MySQL (DROP TRIGGER)

Триггер представления MySQL

Просмотр триггеров означает просмотр определения, статуса и синтаксической информации триггеров, которые уже существуют в базе данных. Методы просмотра триггеров в MySQL включают оператор SHOW TRIGGERS и запрос таблицы данных триггеров в базе данных Information_schema. В этом разделе подробно описаны оба метода просмотра триггеров.

Оператор SHOW TRIGGERS для просмотра информации о триггере.

В MySQL вы можете просмотреть основную информацию о триггерах с помощью оператора SHOW TRIGGERS. Формат синтаксиса следующий:

SHOW TRIGGERS;
Пример 1

Сначала создайте учетную запись таблицы данных.В таблице есть два поля: Accnum типа INT и сумма типа DECIMAL. Операторы SQL и результаты выполнения следующие:

mysql> CREATE TABLE account(
    -> accnum INT(4),
    -> amount DECIMAL(10,2));
Query OK, 0 rows affected (0.49 sec)

Создайте триггер с именем trigupdate и вставляйте фрагмент данных в таблицу данных myevent каждый раз, когда таблица учетных записей обновляет данные. Инструкция SQL и результаты создания таблицы данных myevent следующие:

mysql> CREATE TABLE myevent(
    -> id INT(11) DEFAULT NULL,
    -> evtname CHAR(20) DEFAULT NULL);
Query OK, 0 rows affected (0.26 sec)

Код SQL для создания триггера trigupdate выглядит следующим образом:

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)

Вы можете увидеть основную информацию о триггере из результатов запуска. Описание отображаемой выше информации следующее:

  • Триггер представляет имя триггера, здесь имя триггера — trigupdate;
  • Событие представляет собой событие, которое активирует триггер.Событием-триггером здесь является операция обновления UPDATE;
  • Таблица представляет собой таблицу объекта операции активированного триггера, здесь это таблица счетов;
  • Оператор представляет собой операцию, выполняемую триггером, здесь это вставка фрагмента данных в таблицу данных myevent;
  • Время представляет собой время срабатывания триггера, в данном случае после операции обновления (AFTER);
  • Существует также некоторая другая информация, такая как время создания триггера, режим SQL, учетная запись определения триггера, набор символов и т. д., которая не будет представлена ​​здесь по отдельности.

Базовые навыки работы с базами данных 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

Используйте команду SELECT ниже, чтобы просмотреть триггер trigupdate. Оператор 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 указывает, что момент срабатывания — ПОСЛЕ;
  • Существует также некоторая другая информация, такая как время создания триггера, режим SQL, учетная запись определения триггера, набор символов и т. д., которая не будет представлена ​​здесь по отдельности.

 
В приведенном выше операторе SQL также нельзя указать имя триггера, чтобы были просмотрены все триггеры.

SELECT * FROM information_schema.triggers \G

Этот оператор отобразит всю информацию о триггерах в таблице данных триггеров.

Триггеры изменения и удаления MySQL (DROP TRIGGER)

Вы можете изменить триггер, удалив исходный триггер и создав новый триггер с тем же именем.

базовая грамматика

Как и другие  объекты базы данных MySQL  , триггеры можно удалить из базы данных с помощью оператора DROP.

Формат синтаксиса следующий:

DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名>

Синтаксис объясняется следующим образом:

1) Имя триггера

Имя триггера, который требуется удалить.

2) Имя базы данных

Необязательный. Указывает имя базы данных, в которой находится триггер. Если не указано, это текущая база данных по умолчанию.

3) Разрешения

Для выполнения оператора DROP TRIGGER необходимы полномочия SUPER.

4) ЕСЛИ СУЩЕСТВУЕТ

Необязательный. Не удаляйте триггеры без триггеров.

注意:删除一个表的同时,也会自动删除该表上的触发器。另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,再重新创建。

удалить триггер

Используйте оператор DROP TRIGGER для удаления триггеров, определенных в MySQL.

[Пример] Удалите триггер 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