千家信息网

MySQL触发器trigger怎么用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了MySQL触发器trigger怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、触发器简介1、什么是触发器?触
千家信息网最后更新 2026年10月31日MySQL触发器trigger怎么用

这篇文章主要介绍了MySQL触发器trigger怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、触发器简介

1、什么是触发器?

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

2、触发器的特性

  • 有begin end体,begin end;之间的语句可以写的简单或者复杂

  • 什么条件会触发:I、D、U

  • 什么时候触发:在增删改前或者后

  • 触发频率:针对每一行执行

  • 触发器定义在表上,附着在表上。

也就是由事件来触发某个操作,事件包括INSERT语句,UPDATE语句和DELETE语句;可以协助应用在数据库端确保数据的完整性。

注意:cannot associate a trigger with a TEMPORARY table or a view.

!!尽量少使用触发器,不建议使用。

假设触发器触发每次执行1s,insert table 500条数据,那么就需要触发500次触发器,光是触发器执行的时间就花费了500s,而insert 500条数据一共是1s,那么这个insert的效率就非常低了。因此我们特别需要注意的一点是触发器的begin end;之间的语句的执行效率一定要高,资源消耗要小。

触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的:触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。

二、、创建触发器

CREATE    [DEFINER = { user | CURRENT_USER }]TRIGGER trigger_nametrigger_time trigger_eventON tbl_name FOR EACH ROW  [trigger_order]trigger_bodytrigger_time: { BEFORE | AFTER }trigger_event: { INSERT | UPDATE | DELETE }trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

> BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后。

> FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次。

> tigger_event详解:

  ①INSERT型触发器:插入某一行时激活触发器,可能通过INSERT、LOAD DATA、REPLACE 语句触发(LOAD DAT语句用于将一个文件装入到一个数据表中,相当与一系列的INSERT操作);

  ②UPDATE型触发器:更改某一行时激活触发器,可能通过UPDATE语句触发;

  ③DELETE型触发器:删除某一行时激活触发器,可能通过DELETE、REPLACE语句触发。

> trigger_order是MySQL5.7之后的一个功能,用于定义多个触发器,使用follows(尾随)或precedes(在…之先)来选择触发器执行的先后顺序。

1、创建只有一个执行语句的触发器

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句;

例1:创建了一个名为trig1的触发器,一旦在work表中有插入动作,就会自动往time表里插入当前时间

mysql> CREATE TRIGGER trig1 AFTER INSERT    -> ON work FOR EACH ROW    -> INSERT INTO time VALUES(NOW());

2、创建有多个执行语句的触发器

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件

ON 表名 FOR EACH ROW

BEGIN

执行语句列表

END;

例2:定义一个触发器,一旦有满足条件的删除操作,就会执行BEGIN和END中的语句

mysql> DELIMITER ||mysql> CREATE TRIGGER trig2 BEFORE DELETE    -> ON work FOR EACH ROW    -> BEGIN    ->   INSERT INTO time VALUES(NOW());    ->   INSERT INTO time VALUES(NOW());    -> END||mysql> DELIMITER ;

3、NEW与OLD详解

MySQL 中定义了 NEW 和 OLD,用来表示触发器的所在表中,触发了触发器的那一行数据,来引用触发器中发生变化的记录内容,具体地:

①在INSERT型触发器中,NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据;

②在UPDATE型触发器中,OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据;

③在DELETE型触发器中,OLD用来表示将要或已经被删除的原数据;

使用方法:

  NEW.columnName (columnName为相应数据表某一列名)

另外,OLD是只读的,而NEW则可以在触发器中使用 SET 赋值,这样不会再次触发触发器,造成循环调用(如每插入一个学生前,都在其学号前加"2013")。

例3:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);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 ;mysql> update account set amount=-10 where acct_num=137;mysql> select * from account;+----------+---------+| acct_num | amount  |+----------+---------+|      137 |    0.00 ||      141 | 1937.50 ||       97 | -100.00 |+----------+---------+mysql> update account set amount=200 where acct_num=137;mysql> select * from account;+----------+---------+| acct_num | amount  |+----------+---------+|      137 |  100.00 ||      141 | 1937.50 ||       97 | -100.00 |+----------+---------+

三、查看触发器

1、SHOW TRIGGERS语句查看触发器信息

mysql> SHOW TRIGGERS\G;

……

结果,显示所有触发器的基本信息;无法查询指定的触发器。

2、在information_schema.triggers表中查看触发器信息

mysql> SELECT * FROM information_schema.triggers\G

……

结果,显示所有触发器的详细信息;同时,该方法可以查询制定触发器的详细信息。

mysql> select * from information_schema.triggers     -> where trigger_name='upd_check'\G;Tips:

所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询。

四、删除触发器

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

删除触发器之后最好使用上面的方法查看一遍;同时,也可以使用database.trig来指定某个数据库中的触发器。

Tips:

  如果不需要某个触发器时一定要将这个触发器删除,以免造成意外操作,这很关键。

感谢你能够认真阅读完这篇文章,希望小编分享的"MySQL触发器trigger怎么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

触发器 语句 数据 一行 信息 事件 数据库 篇文章 查询 同时 方法 时间 条件 激活 资源 消耗 之间 也就是 多个 效率 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 互联网通讯科技 疫情对互联网科技公司影响 盈实互联网科技 深圳互联网络科技有限公司 互联网 科技创业 互联网科技的未来发展 互联网科技股午盘股票涨跌 老年人脱离互联网科技的作文 北京华百购互联网科技有限公司 互联网金融中的现代科技 杭州壁岐互联网科技有限公司 银川新华互联网科技学校联系电话 东莞新华互联网科技学校 四川慕妮娅互联网科技有限公司 南博望互联网科技有限公司 山东子淼互联网科技有限公司 张召忠谈中国互联网科技 新氧科技和美国互联网有关系吗 互联网科技手机排行榜 互联网科技公司华为 喔噻互联网科技 奇酷互联网络科技 迪茉互联网科技 广西拼得多互联网科技有限公司 互联网实体化科技化 宁夏科技产业互联网案例 互联网科技大赛获奖感言 互联网金融科技名词解释 锡山区互联网智能科技产品供应
0