广告
返回顶部
首页 > 资讯 > 数据库 >十一、MySQL触发器
  • 573
分享到

十一、MySQL触发器

2024-04-02 19:04:59 573人浏览 独家记忆
摘要

  Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执

  Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会触发执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,当激活该对象。


11.1、创建触发器

 触发器是一个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当预定义的时间发生的时候,就会被Mysql自动调用。

 创建一个触发器的语法为:

CREATE TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_body

trigger_name:触发器名称,用户自行指定

trigger_time:触发时机,可以指定为before或after 

trigger_event:标识触发事件

tbl_name:标识触发器的表名

trigger_body:触发器执行语句

创建一个单执行语句的触发器:

mysql> CREATE TABLE account (acc_num INT,amount DECIMAL(10,2));
Query OK, 0 rows affected (0.06 sec)

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum +NEW.amount;
Query OK, 0 rows affected (0.02 sec)

mysql> SET @sum=0;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO account VALUES (1,1.00),(2,2.00);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT @sum;
+------+
| @sum |
+------+
| 3.00 |
+------+
1 row in set (0.00 sec)


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

CREATE TRIGGER trigger_name trigger_time trigger_event
	ON tbl_name FOR EACH ROW 
	BEGIN
	  trigger_stmt
	END


11.2、查看触发器

 查看触发器是指查看数据库中已存在的触发器的定义、状态和触发信息等可以通过SHOW TRUGGERS和在triggers表中查看触发器信息。

mysql> CREATE TABLE myevent
    -> (
    -> id int(11) DEFAULT NULL,
    -> evt_name char(20) DEFAULT NULL
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE TRIGGER trig_update AFTER UPDATE ON account
    -> FOR EACH ROW INSERT INTO myevent VALUES (1,'AFTER UPDATE');
Query OK, 0 rows affected (0.05 sec)

mysql> SHOW TRIGGERS \G
*************************** 1. row ***************************
             Trigger: ins_sum
               Event: INSERT
               Table: account
           Statement: SET @sum = @sum +NEW.amount
              Timing: BEFORE
             Created: NULL
            sql_mode: 
             Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
*************************** 2. row ***************************
             Trigger: trig_update
               Event: UPDATE
               Table: account
           Statement: INSERT INTO myevent VALUES (1,'AFTER UPDATE')
              Timing: AFTER
             Created: NULL
            sql_mode: 
             Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
2 rows in set (0.00 sec)


  在MySQL中所有触发器的定义都存在INFORMATION_SCHEMA数据库的TRIGGERS表中,可以通过SELECT 来查看,其语法格式为:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE condition;
mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME='trig_update' \G
*************************** 1. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: test
              TRIGGER_NAME: trig_update
        EVENT_MANIPULATION: UPDATE
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: test
        EVENT_OBJECT_TABLE: account
              ACTION_ORDER: 0
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: INSERT INTO myevent VALUES (1,'AFTER UPDATE')
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: AFTER
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: NULL
                  SQL_MODE: 
                   DEFINER: root@localhost
      CHARACTER_SET_CLIENT: utf8
      COLLATION_CONNECTION: utf8_general_ci
        DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)


11.3、触发器的使用

  触发程序是与表有关的命名数据库对象,当表上出现特定时间时,将激活该对象。

创建一个在account表插入数据之后,更新myevent数据表的触发器。

mysql> CREATE TRIGGER trig_inster AFTER INSERT ON account 
    -> FOR EACH ROW INSERT INTO myevent VALUES (2,'AFTER INSERT'); 
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO account VALUES (1,1.00),(2,2.00);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM myevent;
+------+--------------+
| id   | evt_name     |
+------+--------------+
|    2 | AFTER INSERT |
|    2 | AFTER INSERT |
+------+--------------+
2 rows in set (0.00 sec)


11.4、删除触发器

  使用DROP TRIGGER语句可以删除MySQL中已经存在的触发器,其语法格式为:

DROP TRIGGER [schema_name.]trigger_name

删除一个触发器

mysql> DROP TRIGGER test.ins_sum;
Query OK, 0 rows affected (0.02 sec)


您可能感兴趣的文档:

--结束END--

本文标题: 十一、MySQL触发器

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

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

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

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

下载Word文档
猜你喜欢
  • 十一、MySQL触发器
      MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执...
    99+
    2022-10-18
  • MySQL触发器了解一下
    简介 触发器是与表有关的数据库对象,当表发生INSERT/UPDATE/DELETE操作时,对应操作的触发器会被触发,将在这些操作之前或之后执行触发器中定义的SQL语句集合。 触发器的使用 创建触发器 语法: CREATE [DE...
    99+
    2019-06-16
    MySQL触发器了解一下
  • MySQL | MySQL触发器
    目录 一、创建触发器 1.2 创建只有一个执行语句的触发器 1.2 创建有多个执行语句的触发器 二、查看触发器 2.1 利用SHOW TRIGGERS语句查看触发器信息 2.2 在triggers表中查看触发器信息 三、删除触发器 一、创...
    99+
    2023-09-02
    数据库 sql mysql 数据库开发 数据库架构
  • MySQL——触发器
    基本语法 //创建触发器 CREATE TRIGGER name //删除触发器 DROP TRIGGER name 创建触发器 在创建触发器时需要给出4条信息 唯一的触发器名 触发器需要关联的表 触发器应该响应...
    99+
    2020-02-06
    MySQL——触发器
  • MySQL-触发器
    一、触发器 触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件...
    99+
    2022-10-18
  • MySQL触发器
    1、 触发器定义: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进...
    99+
    2019-06-10
    MySQL触发器
  • MySQL 触发器
    文章目录 1.简介2.行级与语句级触发器3.触发时机4.触发器优缺点5.创建触发器语法示例 6.查看触发器7.删除触发器参考文献 1.简介 触发器(Trigger)是与表关联的命名数据库对象,当表发生特定事件时激活。 触发器...
    99+
    2023-08-30
    mysql 触发器
  • 记一次由mysql触发器引发的故障
    上周六到公司上班,刚坐下没多久,公司业务传过消息说,用户borrow表信息无法更新。查看网站报错如下:报错信息表示是由于mysql的函数和触发器引起的,问了下公司开发,他们表示函数功能已经测试上线好久了,没...
    99+
    2022-10-18
  • MySQL中怎么创建一个触发器
    MySQL中怎么创建一个触发器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 --创建测试表Mar...
    99+
    2022-10-18
  • mysql中怎么建立一个触发器
    本篇文章给大家分享的是有关mysql中怎么建立一个触发器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。创建触发器。创建触发器语法如下:&nbs...
    99+
    2022-10-18
  • mysql之触发器
           触发器是一种 特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL也不需要手工启动,只要当一个预...
    99+
    2022-10-18
  • mysql触发器(trigger)
    触发器的作用 监听数据的变化,以实现当数据变化时的关联操作,不过感觉没有实际作用,触发器的功能如果用代码逻辑来控制感觉会更正规些,毕竟团队中的其它人不一定会看到你定义的触发器,但一定能看到你的代码。那为何还...
    99+
    2022-10-18
  • 怎么在mysql中创建一个触发器
    本篇文章为大家展示了怎么在mysql中创建一个触发器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们可以可以使用CREATE TRIGGER语句创建一个新的触发器...
    99+
    2022-10-18
  • MySQL进阶——触发器
    1.触发器定义 同存储过程和函数类似,MySQL中的触发器也是存储在系统内部的一段程序代码,可以把它看作是一个特殊的存储过程。所不同的是,触发器无需人工调用,当程序满足定义条件时就会被MySQL自动调用。这些条件可以称为触发事件,包括INS...
    99+
    2023-10-28
    数据库
  • Mysql中的触发器
      阅读目录 什么是触发器 特点及作用 例子:创建触发器,记录表的增、删、改操作记录 弊端 什么是触发器 简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行; 特点及...
    99+
    2018-09-20
    Mysql中的触发器
  • MySQL(89)MySQL查看触发器
    MySQL查看触发器 查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表...
    99+
    2023-10-25
    mysql 数据库 sql
  • 如果 MySQL 中存在触发器,则删除触发器?
    要删除触发器,请使用DROP命令。语法如下 −DROP TRIGGER IF EXISTS yourTriggerName;为了理解上述语法,您需要在当前数据库中有一个触发器。要检查触发器是否存在,您可以使用以下查询。我们的数据库中有一个触...
    99+
    2023-10-22
  • mysql触发器怎么用
    这篇文章给大家分享的是有关mysql触发器怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。说明触发器也是存储过程程序的一种,而触发器内部的执行SQL语句是可以多行操作的。在MySQL的存储过程程序中,要定义结...
    99+
    2023-06-20
  • MYSQL触发器的使用
    概念:触发器是一种特殊的储存过程,在满足定义条件操作时触发,并且自动执行触发器中预先设定好的定义的语句集合 触发器是特殊的储存过程 触发器是在对表操作时,满足条件就可以自动调用预先编译的sql语句 安全性 可以基于数据库的值使用户...
    99+
    2021-10-21
    MYSQL触发器的使用
  • MySQL触发器之初见
    触发器 语法 CREATE TRIGGER trigger_name trigger_time trigger_event NO table_name FOR EACH ROW trigger_stmt trigger_name: ...
    99+
    2014-11-27
    MySQL触发器之初见
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作