2021年4月16日星期五

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









原文转载:http://www.shaoqun.com/a/691748.html

跨境电商:https://www.ikjzd.com/

barclays:https://www.ikjzd.com/w/2775

淘粉吧返利:https://www.ikjzd.com/w/1725


简介触发器是与表有关的数据库对象,当表发生INSERT/UPDATE/DELETE操作时,对应操作的触发器会被触发,将在这些操作之前或之后执行触发器中定义的SQL语句集合。触发器的使用创建触发器语法:CREATE[DEFINER=user]TRIGGERtrigger_nametrigger_timetrigger_eventONtbl_nameFOREACHROW[trigger_order]t
agora:https://www.ikjzd.com/w/2176
欧舒丹:https://www.ikjzd.com/w/1756
夸克:https://www.ikjzd.com/w/1237
离婚后我们却成了暧昧情人:http://www.30bags.com/a/253580.html
这些站外营销推广策略你还不懂?:https://www.ikjzd.com/home/95819
滥用变体导致账号受限的原因分析及风险提醒!:https://www.ikjzd.com/home/110932

没有评论:

发表评论