百木园-与人分享,
就是让自己快乐。

MySQL触发器了解一下

简介

触发器是与表有关的数据库对象,当表发生INSERT/UPDATE/DELETE操作时,对应操作的触发器会被触发,将在这些操作之前或之后执行触发器中定义的SQL语句集合。

触发器的使用

创建触发器

语法:

CREATE
[DEFINER = user]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body

user:指定在触发器激活时检查访问权限时要使用的MySQL帐户。

trigger_name:触发器名称。

trigger_time:触发动作时间。可以是BEFORE或AFTER,表示触发器在要修改的每一行之前或之后激活。

trigger_event:触发器的类型,可以是INSERT、UPDATE、DELETE。

tbl_name:和触发器关联的表名,必须为一个永久表,不能是视图或者临时表。

trigger_order:指定触发器顺序,取值为FOLLOWS/PRECEDES+触发器名称。(从MySQL 5.7.2开始,可以为表创建具有相同trigger_time和trigger_event的多个触发器,默认顺序是按创建顺序进行激活)

trigger_body:触发器激活时要执行的语句。如果要执行多个语句,需要使用BEGIN ... END复合语句包裹。

示例:

CREATE TRIGGER student_add2 AFTER INSERT ON tb_student
FOR EACH ROW
INSERT INTO tb_new_student (student_id, student_name) VALUES (NEW.id, NEW. NAME);

当在MySQL命令行创建执行多个语句的触发器时,同存储过程一样,也需要修改语句分隔符,如下:

mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END;//
mysql> delimiter ;

触发器类型

触发器分为三种类型:INSERT、DELETE、UPDATE。

在触发器主体中,使用OLD和NEW关键字能够访问受触发器影响的行中的列,根据触发器类型的不同,在关键字使用上也有些区别。(OLD和NEW是对MySQL触发器的扩展,它们不区分大小写)

INSERT触发器:当在表中插入新行时,触发器就会激活。插入操作只有新行,所以只有NEW关键字可用,可以通过NEW访问插入的新行数据。

DELETE触发器:当在表中删除一行时,触发器就会激活。删除操作只有旧行,所以只有OLD关键字可用,可以通过OLD访问删除的旧行数据。

UPDATE触发器:当表中一行数据被修改时,触发器就会激活。NEW关键字和OLD关键字都可用,可以通过NEW访问更新后的行数据,通过OLD访问更新前的行数据。

查看触发器定义

语法:

SHOW CREATE TRIGGER trigger_name

示例:

mysql> SHOW CREATE TRIGGER student_add;
+-------------+----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Trigger | sql_mode | SQL Original Statement | character_set_client | collation_connection | Database Collation |
+-------------+----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| student_add | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` TRIGGER student_add AFTER INSERT ON tb_student FOR EACH ROW INSERT INTO tb_new_student (student_id, student_name) VALUES (NEW.id, NEW. NAME) | utf8 | utf8_general_ci | utf8_general_ci |
+-------------+----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+

Trigger:触发器名称。

sql_mode:当触发器执行时,SQL模式生效。

SQL Original Statement:触发器的创建语句。

character_set_client:创建触发器时character_set_client系统变量的会话值。

collation_connection:创建触发器时collation_connection系统变量的会话值。

Database Collation:与触发器相关联的数据库的排序。

删除触发器

语法:

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

示例:

mysql> DROP TRIGGER student_add;
Query OK, 0 rows affected

注意:如果表被删除,该表的关联的所有触发器也将会被删除。

参考:Using Triggers

来源:https://www.cnblogs.com/seve/p/14644124.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » MySQL触发器了解一下

相关推荐

  • 暂无文章