iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL的触发器的原理是什么
  • 783
分享到

MySQL的触发器的原理是什么

2024-04-02 19:04:59 783人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关Mysql的触发器的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、触发器的概念触发器(trigger)是mysql提供给程

这期内容当中小编将会给大家带来有关Mysql的触发器的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1、触发器的概念

触发器(trigger)是mysql提供给程序员数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行。——百度百科

上面是百度给的触发器的概念,我理解的触发器的概念,就是你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的sql语句,就这么简单。

超简说明:sql1->触发->sqlN,一条sql触发多个sql

2、触发器创建的四个要素

(1)监视地点(table)
(2)监视事件(insert/update/delete)
(3)触发时间(after/before)
(4)触发事件(insert/update/delete)

3、创建触发器

需求:在下订单的时候,对应的商品的库存量要相应的减少,即买几个商品就减少多少个库存量。

订单表:ord
商品表:Goods

首先来创建表并添加几条数据:

create table goods(
  gid int,
  name varchar(20),
  num smallint
);
create table ord(
  oid int,
  gid int,
  much smallint
);
insert into goods values(1,'cat',40);
insert into goods values(2,'dog',63);
insert into goods values(3,'pig',87);

然后按照触发器创建的四个要素来进行分析:

  • 监视谁:ord(订单表)

  • 监视动作:insert(插入操作)

  • 触发时间:after(在插入操作后触发)

  • 触发事件:update(触发更新操作)


最后创建触发器:

create trigger t1 
after
insert 
on ord
for each row
begin
 update goods set num=num-2 where gid = 1;
end$

分析:触发器的名称为t1,触发时间为after,监视动作为insert,监视ord表,for each row最后在进行讨论,这里先记住就行了,begin和end之间写触发事件,这里是一个update语句。意思是不论我下什么订单,都会把商品编号为1的商品的库存量减去2个。

注意:先不要运行上面的代码,因为mysql的执行结束标识默认是;。如果运行以上的sql语句,mysql碰到;时会自动停止执行,然后end语句就执行不到了。所以我们需要先将mysql的结束标识符改为其他的字符,一般都选用$或者$$,这里选用$来作为执行的结束标识。使用下面的语句来修改MySQL执行的结束标识。

delimiter $ //设置MySQL执行结束标志,默认为;

4、查看和删除已有的触发器

(1)查看已有触发器:show triggers
(2)删除已有触发器:drop trigger triggerName

5、触发器中引用行变量

(1)在触发目标上执行insert操作后会有一个新行,如果在触发事件中需要用到这个新行的变量,可以用new关键字表示
(2)在触发目标上执行delete操作后会有一个旧行,如果在触发事件中需要用到这个旧行的变量,可以用old关键字表示
(3)在触发目标上执行update操作后原纪录是旧行,新记录是新行,可以使用new和old关键字来分别操作

当下订单时减少相应的货品的库存量,创建触发器:

create trigger t2
after
insert 
on ord
for each row
begin
 update goods set num=num-new.much where gid=new.gid;
end$

当删除订单时增加相应的修改货品的库存量,创建触发器:

create trigger t3
after
delete
on ord
for each row
begin
 update goods set num=num+old.much where gid=old.gid;
end$

当更新订单的购买数修改相应的修改货品的库存量,创建触发器:

create trigger t4
before 
update
on ord
for each row
begin
 update goods set num=num+old.much-new.much where gid = new.gid;
end$

6、after和before的区别

after操作,是在执行了监视动作后,才会执行触发事件
before操作,是在执行了监视动作前,会执行触发事件
两者在一般的触发器中并没有什么区别,但是有的时候有区别,如:

需求:在用户定了超过库存的订单后,会修改该订单的订购数量,使订购数量的最大值和库存量相同 分析:首先判断 订购量 > 库存量,然后做将订购量改为库存量

创建触发器:

create trigger t5
before
insert 
on ord
for each row
begin
 declare restNum int;
 select num into restNum from goods where gid = new.gid;
 if new.much > restNum then
   set new.much = restNum;
 end if;
 update goods set num=num-new.much where gid=new.gid;
end$

注意:这里如果使用的是after就会报错,如果使用的是after,就会先执行insert操作,也就是插入订单操作,然后在进行判断下单数量和库存量,得出新的下单数量,可是已经执行了下单操作了,所以就会报错。这里必须使用before操作。

7、for each row是干什么的?

oracle触发器中,触发器分为行触发器和语句触发器

比如:

create trigger tn
after
update
on xxtable
for each row #每一行受影响,触发事件都执行,叫做行触发器
begin
 sqlN;
end$

执行:

update xxtable set xxx=xxx where id>100;

该修改操作假设100行,那么sqlN,会触发多少次?答案:会触发100次。

拓展:

在oracle中,for each row如果不写,无论update语句一次影响了多少行,都只执行一次触发事件。
比如:1人下了订单,买了5件商品,insert 5次,可以用行级触发器,修改5次库存;用语句级触发器触发,insert一条发货提醒。

上述就是小编为大家分享的MySQL的触发器的原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL的触发器的原理是什么

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL的触发器的原理是什么
    这期内容当中小编将会给大家带来有关MySQL的触发器的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、触发器的概念触发器(trigger)是MySQL提供给程...
    99+
    2024-04-02
  • mysql触发器的工作原理是什么
    MySQL触发器是一种特殊类型的存储过程,它在指定的事件发生时自动执行。触发器可以在数据库表中的数据发生更改之前、之后或替代发生更改...
    99+
    2023-10-12
    mysql
  • sql触发器的工作原理是什么
    SQL触发器是一种特殊的存储过程,它会在数据库表的某个特定事件发生时自动触发执行。触发器能够对表的INSERT、UPDATE、DEL...
    99+
    2023-10-25
    sql
  • MySQL触发器是什么?原理与应用解析
    MySQL触发器是什么?原理与应用解析 MySQL触发器是一种存储过程,它会在指定的表中发生特定的操作(比如插入、更新、删除)时被自动执行。触发器可以用来监视和响应数据库中的数据变化,...
    99+
    2024-04-02
  • mysql触发器指的是什么
    这篇文章主要介绍了mysql触发器指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说明触发器是MySQL向程序员和数据分析员提供保证数据完整性的方法,是与手表事件相关...
    99+
    2023-06-20
  • 数据库触发器的工作原理是什么
    数据库触发器是一种特殊的数据库对象,可以在数据库中的指定操作发生时自动执行一些预定义的操作。它的工作原理主要包括以下几个步骤: ...
    99+
    2023-10-24
    数据库
  • mysql触发器的概念是什么
    本篇内容介绍了“mysql触发器的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • mysql触发器的作用是什么
    本篇内容介绍了“mysql触发器的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明在写数据之前,可以强制检查或转换数据等。触发器...
    99+
    2023-06-20
  • Mysql中的触发器的语法是什么
    这篇文章主要介绍“Mysql中的触发器的语法是什么”,在日常操作中,相信很多人在Mysql中的触发器的语法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql中的触发器的语法是什么”的疑惑有所帮助!...
    99+
    2023-07-02
  • mysql触发器作用是什么
    mysql触发器的作用是:1、通过在触发器中定义约束和验证逻辑,可以保证数据的完整性和一致性;2、自动化执行一些常见的数据库操作,减少编写重复代码的工作量;3、记录对数据库表的修改操作,用于审计和追踪数据变更;4、在源数据库上捕获数据更改事...
    99+
    2023-07-25
  • mysql查询触发器的方法是什么
    要查询 MySQL 中的触发器,可以使用以下命令: SHOW TRIGGERS; 这条命令将列出当前数据库中所有的触发器,包括它们...
    99+
    2024-04-22
    mysql
  • mysql查询触发器的语句是什么
    这篇文章主要介绍“mysql查询触发器的语句是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql查询触发器的语句是什么”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • 浅谈MySQL触发器的原理以及使用
    目录mysql 触发器触发程序的优点如下:MySQL 触发器 MySQL 数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工...
    99+
    2023-05-20
    MySQL 触发器 MySQL触发器原理
  • Zabbix中的触发器是什么
    Zabbix中的触发器是用来定义在监控项达到某个预定的阈值时触发告警的条件。触发器通常与监控项关联,当监控项的值满足设定的条件时,触...
    99+
    2024-04-02
  • 触发器的特点是什么?
    这篇文章给大家分享的是有关触发器的特点是什么?的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。触发器的特点:1、自动执行;触发器在对表的数据作了任何修改之后立即被激活。2、级联更新...
    99+
    2024-04-02
  • Oracle中的触发器是什么
    在Oracle数据库中,触发器是一种存储在数据库中的特殊类型的PL/SQL程序,它会在指定的表上触发特定的事件时自动执行。这些事件可...
    99+
    2024-04-09
    Oracle
  • mysql创建触发器报错的原因及解决方法是什么
    MySQL创建触发器报错的原因有很多种,常见的有以下几种情况: 语法错误:在创建触发器的语句中可能存在语法错误,比如缺少分号、括...
    99+
    2023-10-24
    mysql
  • 什么是SQLServer中的触发器
    在SQL Server中,触发器是一种特殊的存储过程,它会在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动...
    99+
    2024-04-09
    SQLServer
  • 什么是触发器
    本篇内容介绍了“什么是触发器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、触发器的概念 触发器是一种特...
    99+
    2024-04-02
  • oracle触发器是什么
    本篇文章给大家分享的是有关oracle触发器是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Oracle触发器是什么呢? 首先我们来了解一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作