MySQL学习笔记6(触发器)

时间:2022-04-23 05:09:45

MySQL学习笔记6

触发器

触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。

1:触发器的含义和作用
2:如何创建触发器
3:如何查看触发器
4:如何删除触发器

1.1:创建只有一个执行语句的触发器

语法基本形式为:
CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
ON 表名 FOR EACH ROW 执行语句

CREATE TRIGGER dept_trig1 BEFORE INSERT
ON department FOR EACH ROW
INSERT INTO trigger_time VALUES(NOW());

该语句的意思是指:在向department表中插入数据前向trigger_time表中插入当前时间。

1.2:创建有多个执行语句的触发器

语法基本形式为:
CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END

BEGIN和END之间的“执行语句列表”参数表示需要执行的多个执行语句的内容,不同的执行语句之间用分号。

DELIMITER ##; 程序结束符号变为##;。

CREATE TRIGGER dept_trig2 AFTER INSERT
ON department FOR EACH ROW
BEGIN
INSERT INTO trigger_time VALUES('21:23:05');

INSERT INTO trigger_time VALUES('21:25:13');
END
##;

2:查看触发器

查看触发器的方法包括SHOW TRIGGERS语句和查询information_schema数据库下的triggers表等。

SHOW TRIGGERS\G

显示当前所有触发器:
***************** 1. row *****************
Trigger: dept_trig1
Event: INSERT
Table: department
Statement: INSERT INTO trigger_time VALUES(NOW())
Timing: BEFORE
Created: 2016-03-12 20:12:41.75
sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
***************** 2. row *****************
Trigger: dept_trig2
Event: INSERT
Table: department
Statement: BEGIN
INSERT INTO trigger_time VALUES(‘21:23:05’);
INSERT INTO trigger_time VALUES(‘21:25:13’);
END
Timing: AFTER
Created: 2016-03-12 20:33:16.32
sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci

MySQL中,所有触发器的定义都存在information_schema数据库的triggers表中。

SELECT * FROM information_schema.triggers\G
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='dept_trig1'\G

第一个语句显示所有触发器
第二个语句显示指定触发器名的触发器

3:删除触发器

删除触发器使用的语法形式如下:
DROP TRIGGER 触发器名;