广告
返回顶部
首页 > 资讯 > 数据库 >MySQL触发器trigger的使用
  • 861
分享到

MySQL触发器trigger的使用

2024-04-02 19:04:59 861人浏览 薄情痞子
摘要

Q:什么是触发器?A:  触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的特性:  1、有begin end体,begin end;之间的语句可以写的简单或者复杂 

Q:什么是触发器?

A:

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

MySQL触发器trigger的使用

触发器的特性:

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

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

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

  4、触发频率:针对每一行执行

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

也就是由事件来触发某个操作,事件包括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;之间的语句的执行效率一定要高,资源消耗要小。

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

 

一、创建触发器

MySQL触发器trigger的使用

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

trigger_time: { BEFORE | AFTER }

trigger_event: { INSERT | UPDATE | DELETE }

trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

MySQL触发器trigger的使用

> 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触发器trigger的使用

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 ;

MySQL触发器trigger的使用

 

3、NEW与OLD详解

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

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

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

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

使用方法:

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

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

例3:

MySQL触发器trigger的使用

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 |
+----------+---------+

MySQL触发器trigger的使用

 

 

二、查看触发器

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:

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


您可能感兴趣的文档:

--结束END--

本文标题: MySQL触发器trigger的使用

本文链接: https://www.lsjlt.com/news/42120.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL触发器trigger的使用
    Q:什么是触发器?A:  触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的特性:  1、有begin end体,begin end;之间的语句可以写的简单或者复杂 ...
    99+
    2022-10-18
  • mysql触发器(trigger)
    触发器的作用 监听数据的变化,以实现当数据变化时的关联操作,不过感觉没有实际作用,触发器的功能如果用代码逻辑来控制感觉会更正规些,毕竟团队中的其它人不一定会看到你定义的触发器,但一定能看到你的代码。那为何还...
    99+
    2022-10-18
  • mysql触发器trigger的使用案例
    这篇文章主要介绍了mysql触发器trigger的使用案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是触发器触发器是与表有关的数据库对象,在满足定义条件时触发,并执行...
    99+
    2023-06-14
  • MySQL的触发器trigger怎么使用
    MySQL的触发器(trigger)可以在特定的数据库操作发生时自动执行一系列的SQL语句。触发器可以在插入、更新或删除数据时触发执...
    99+
    2023-08-11
    MySQL trigger
  • 触发器 trigger
    触发器是被指定关联到一个表的数据对象,它不需要调用,当对一个表的特别事件出现时,它就被激活。触发器的代码也是由SQL语句组成的,因此用在存储过程中的语句也可以用再触发器的定义中。触发器是一类特殊的存储过程,与表的关系密切,用于保护...
    99+
    2019-12-09
    触发器 trigger
  • MySQL数据库 触发器 trigger
    目录一、基本概念1、作用2、触发器的优缺点2.1、优点2.2、缺点二、创建触发器1、基本语法2、触发对象3、触发时机4、触发事件5、注意事项三、查看触发器四、触发触发器五、删除触发器六、触发器的应用1、完善2、优化一、基...
    99+
    2022-06-16
    MySQL trigger 触发器trigger
  • MySQL数据库触发器trigger怎么使用
    这篇文章主要讲解了“MySQL数据库触发器trigger怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库触发器trigger怎么使用”吧!一、基本概念触发器是一种特殊类...
    99+
    2023-07-02
  • 详细解读MySQL的触发器trigger
    什么是触发器 MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE和DE...
    99+
    2023-05-19
    MySQL触发器 MySQLtrigger
  • 怎么创建MySQL的TRIGGER触发器
    这篇文章主要讲解了“怎么创建MySQL的TRIGGER触发器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么创建MySQL的TRIGGER触发器”吧!My...
    99+
    2022-10-18
  • 详解mysql触发器trigger实例
    目录什么是触发器创建触发器现在有表如下:这里再啰嗦几句:限制和注意事项总结数据库触发器有以下的作用:MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器...
    99+
    2022-11-12
  • mysql触发器trigger实例详解
    MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器...
    99+
    2022-05-22
    mysql 触发器 trigger
  • mysql触发器trigger 实例详解
    https://www.cnblogs.com/phpper/p/7587031.html MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数...
    99+
    2018-01-18
    mysql触发器trigger 实例详解 数据库入门 数据库基础教程 数据库 mysql
  • Sqlite—触发器(Trigger)
    一、简单介绍 SQLite 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于 SQLite 的触发器(Trigger)的要点: SQLite 触发器(Trigger)可以指定在特...
    99+
    2018-09-02
    Sqlite—触发器(Trigger)
  • Oracle的触发器trigger如何使用
    本篇内容主要讲解“Oracle的触发器trigger如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle的触发器trigger如何使用”吧!一、触发器定义Oracle触发器是使用者...
    99+
    2023-06-29
  • Oracle 触发器trigger使用案例
    目录一、触发器定义二、触发器分类三、触发器功能四、触发器语法五、触发器使用案例案例1:向job1表中插入一条数据后输出 欢迎加入 语句案例2:数据校验,不允许星期二和星期四向emp1...
    99+
    2022-11-13
  • Oracle触发器trigger怎么使用
    Oracle触发器(trigger)用于在指定的数据库操作发生时自动执行一段特定的代码,可以用于数据插入、更新或删除时执行特定的操作...
    99+
    2023-08-15
    Oracle trigger
  • Oracle中的触发器trigger
    触发器是指被隐含执行的存储过程 一、创建DML触发器(before/after) 1、行触发器: 当一个DML操作影响DB中的多行时,对于其中复合触发条件的每行均触发一次(for e...
    99+
    2022-11-13
  • MySQL数据库——MySQL创建触发器(CREATE TRIGGER)
    触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 基本语法 在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句...
    99+
    2023-10-20
    数据库 mysql java
  • Oracle Trigger触发器的正确使用方法
    Oracle Trigger是一种在数据库中定义的特殊对象,它可以在特定的数据库操作(如插入、更新或删除)发生时自动触发相关的操作。...
    99+
    2023-09-23
    Oracle
  • Oracle 触发器详解(trigger)
    Oracle中的触发器是一种特殊的数据库对象,它是与表关联的一段PL/SQL代码,当特定的数据库操作发生时,触发器会自动执行这段代码...
    99+
    2023-09-20
    Oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作