Activador de vista MySQL
Ver disparadores se refiere a ver la definición, el estado y la información de sintaxis de los disparadores que ya existen en la base de datos. Los métodos para ver los disparadores en MySQL incluyen la declaración SHOW TRIGGERS y la consulta de la tabla de datos de los disparadores en la base de datos information_schema. Esta sección detalla ambos métodos de visualización de activadores.
MOSTRAR TRIGGERS declaración para ver información de activación
En MySQL, puede ver la información básica de los activadores a través de la declaración SHOW TRIGGERS, el formato de sintaxis es el siguiente:
SHOW TRIGGERS;
Ejemplo 1
Primero cree una cuenta de tabla de datos. Hay dos campos en la tabla, a saber, cuenta de tipo INT y cantidad de tipo DECIMAL. Las declaraciones SQL y los resultados de ejecución son los siguientes:
mysql> CREATE TABLE account(
-> accnum INT(4),
-> amount DECIMAL(10,2));
Query OK, 0 rows affected (0.49 sec)
Cree un activador llamado trigupdate e inserte un dato en la tabla de datos myevent cada vez que la tabla de cuentas actualice los datos. La declaración SQL y los resultados de la ejecución para crear la tabla de datos myevent son los siguientes:
mysql> CREATE TABLE myevent(
-> id INT(11) DEFAULT NULL,
-> evtname CHAR(20) DEFAULT NULL);
Query OK, 0 rows affected (0.26 sec)
El código SQL para crear un disparador de actualización trigonométrica es el siguiente:
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)
Utilice la instrucción SHOW TRIGGERS para ver los disparadores (agréguela después del comando SHOW TRIGGERS \G
para que la información mostrada esté más organizada). La instrucción SQL y los resultados de ejecución son los siguientes:
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)
Puede ver la información básica del activador en los resultados de ejecución. La descripción de la información mostrada arriba es la siguiente:
- Trigger representa el nombre del disparador, aquí el nombre del disparador es trigupdate;
- El evento representa el evento que activa el disparador. El evento desencadenante aquí es la operación de actualización ACTUALIZAR;
- La tabla representa la tabla de objetos de operación del disparador activado, aquí está la tabla de cuentas;
- La declaración representa la operación realizada por el disparador, aquí es insertar un dato en la tabla de datos de myevent;
- El tiempo representa el momento en que se activa el disparador, aquí es después de la operación de actualización (DESPUÉS);
- También hay otra información, como la hora de creación del activador, el modo SQL, la cuenta de definición del activador y el juego de caracteres, etc., que no se introducirán una por una aquí.
Práctica completa de habilidades básicas de la base de datos MySQL https://edu.csdn.net/course/detail/36210
La declaración SHOW TRIGGERS se utiliza para ver información sobre todos los activadores creados actualmente. Debido a que esta declaración no puede consultar el activador especificado, es conveniente utilizarla cuando hay pocos activadores. Si desea ver información sobre un activador específico o hay muchos activadores en la base de datos, puede buscarlo directamente desde la tabla de datos de activadores en la base de datos information_schema.
Ver información de desencadenadores en la tabla de desencadenadores
En MySQL, toda la información de activación se almacena en la tabla de activadores de la base de datos information_schema y se puede ver mediante el comando de consulta SELECT. La sintaxis específica es la siguiente:
SELECT * FROM information_schema.triggers WHERE trigger_name= '触发器名';
Entre ellos, '触发器名'
se utiliza para especificar el nombre del activador que se va a ver y debe estar entre comillas simples. Este método puede consultar el activador especificado, que es más conveniente y flexible de usar.
Ejemplo 2
Utilice el siguiente comando SELECT para ver el disparador de actualización. La declaración SQL es la siguiente:
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME= 'trigupdate'\G
El comando anterior usa WHERE para especificar el nombre del activador que debe verse. Los resultados de la ejecución son los siguientes:
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)
La información detallada del disparador se puede ver en los resultados de ejecución. La descripción de la información mostrada arriba es la siguiente:
- TRIGGER_SCHEMA indica la base de datos donde se encuentra el disparador;
- TRIGGER_NAME representa el nombre del activador;
- EVENT_OBJECT_TABLE indica en qué tabla de datos se activa;
- ACTION_STATEMENT representa la operación específica realizada cuando se activa el disparador;
- El valor de ACTION_ORIENTATION es ROW, lo que significa que se activa en cada registro;
- ACTION_TIMING indica que el momento desencadenante es DESPUÉS;
- También hay otra información, como la hora de creación del activador, el modo SQL, la cuenta de definición del activador y el juego de caracteres, etc., que no se introducirán una por una aquí.
La declaración SQL anterior tampoco puede especificar el nombre del activador, por lo que se verán todos los activadores. La declaración SQL es la siguiente:
SELECT * FROM information_schema.triggers \G
Esta declaración mostrará toda la información de activación en la tabla de datos de activación.
MySQL modifica y elimina activadores (DROP TRIGGER)
Puede modificar un activador eliminando el activador original y creando un activador nuevo con el mismo nombre.
gramática básica
Al igual que otros objetos de la base de datos MySQL , los desencadenantes se pueden eliminar de la base de datos mediante la declaración DROP.
El formato de sintaxis es el siguiente:
DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名>
La sintaxis se explica a continuación:
1) Nombre del activador
El nombre del desencadenador que se va a eliminar.
2) Nombre de la base de datos
Opcional. Especifica el nombre de la base de datos donde reside el desencadenador. Si no se especifica, es la base de datos predeterminada actual.
3) Permisos
Se requiere autorización SUPER para ejecutar la instrucción DROP TRIGGER.
4) SI EXISTE
Opcional. Evite eliminar disparadores sin disparadores.
注意:删除一个表的同时,也会自动删除该表上的触发器。另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,再重新创建。
eliminar disparador
Utilice la instrucción DROP TRIGGER para eliminar activadores que se han definido en MySQL.
[Ejemplo] Eliminar el disparador double_salary. La declaración SQL de entrada y el proceso de ejecución son los siguientes.
mysql> DROP TRIGGER double_salary;
Query OK, 0 rows affected (0.03 sec)
Después de eliminar el activador double_salary, al insertar registros en la tabla de datos tb_emp6 nuevamente, los datos en la tabla de datos tb_emp7 ya no cambian, como se muestra a continuación.
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)