mysql中触发器有什么作用,什么是MySql触发器?作用是什么?

mysql中触发器有什么作用,什么是MySql触发器?作用是什么?由于项目经理临时有事 被安排面试一个新人 期间聊到了 MySql 的存储过程 触发器等知识 发现他对这一块的知识比较陌生 由于之前讲过存储过程 现在就讲讲什么是触发器 其实触发器很好理解 按照字面意思 就是会触发一系列事件操作的东西 基本概念 触发器是与表事件相关的特殊存储过程 它的执行不由程序调用 也非手工启动 而是由事件触发而被执行的 需要区别存储过程 存储过程则需要主动调用其名字执行 触发器 t

由于项目经理临时有事,被安排面试一个新人,期间聊到了MySql的存储过程、触发器等知识,发现他对这一块的知识比较陌生,由于之前讲过存储过程,现在就讲讲什么是触发器。其实触发器很好理解,按照字面意思,就是会触发一系列事件操作的东西。

基本概念:触发器是与表事件相关的特殊存储过程,它的执行不由程序调用,也非手工启动,而是由事件触发而被执行的(需要区别存储过程:存储过程则需要主动调用其名字执行)

触发器(trigger):事先为某张表绑定一段代码,当表中的某些内容发生增、删、改时,系统会自动触发代码并执行。

讲解触发器的经典案例,就是下订单,比如存货100件,如果下订单购买10件,该商品的库存量需相应减少,即买几个商品就减少多少个库存量,先看建表语句:

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’,100);

insert into goods values(2,’dog’,200);

insert into goods values(3,’pig’,300);

创建触发器语句如下:

DROP TRIGGER IF EXISTS databaseName.tri_Name;

CREATE TRIGGER tri_Name — tri_Name代表触发器名称

tirgger_time trigger_event on tableName — tirgger_time为触发时机,可选值有after/before,trigger_event为触发事件,可选值有insert/update/delete

FOR EACH ROW — 这句话在mysql是固定的,表示任何一条记录上的操作满足触发事件都会触发该触发器。

BEGIN

sql语句;

END

(1)查看已有触发器:SHOW TRIGGERS

(2)删除已有触发器:DROP TRIGGER triggerName

CREATE TRIGGER t1

AFTER

INSERT

ON ord

FOR EACH ROW

BEGIN

UPDATE goods SET num=num-2 WHERE gid = 1;

END

我们现在已经建立了一个简单的存储过程,只要订单表ord的gid=1的商品有INSERT(只要买了猫cat,猫的存货就减少2,当然,实际开发过程中减去的具体值,需要是订单购买数量值),看如下过程:

c84d942c918b2d81e47ecfe8d2ed8875.png

我们执行一下插入操作:INSERT INTO ord VALUE(1,10,66)

e12e5a7abf26666fe1463ec106da810b.png

触发器创建的四个要素

1)监视地点(table)

2)监视事件(insert/update/delete)

3)触发时间(after/before)

4)触发事件(insert/update/delete)

监视谁:ord(订单表)

监视事件:insert(ord表插入操作)

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

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

触发器中引用行变量

1)在触发目标上执行insert操作后会有一个新行,如果在触发事件中需要用到该新行的变量,可以用new关键字表示

2)在触发目标上执行delete操作后会有一个旧行,如果在触发事件中需要用到该旧行的变量,可以用old关键字表示

3)在触发目标上执行update操作后原纪录是旧行,新记录是新行,可以使用new和old关键字来分别操作

为了解释上面这句话,我们创建一个t2、t3、t4触发器:

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 = 1;

END

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231266.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月18日 上午11:01
下一篇 2026年1月18日 上午11:22


相关推荐

  • activity生命周期有几种状态_activity生命周期七种方法

    activity生命周期有几种状态_activity生命周期七种方法activity生命周期(这篇足够了)摘要做安卓开发已经4年多了,所接触的知识点也比较零散,在这里记录一下android方面的知识点,方便自己以后复习,有什么不足的,以及错误的欢迎拍砖。activityactivity从开始到结束的四个状态。activity的生命周期。activity的进程优先级。activity的四个状态关于activity的…

    2022年8月16日
    6
  • pip升级后Import Error:cannot import name main解决方案

    pip升级后Import Error:cannot import name main解决方案在 Ubuntu 上安装软件 不小心升级了 pip 导致使用时报错如下

    2026年3月26日
    2
  • 使用ActionForm類別

    使用ActionForm類別入門 07 使用 ActionForm 類別 functiontogg id varoldAttach document getElementBy attachment id with oldAttachmen

    2025年10月29日
    6
  • 手机最强 Python 编程神器,在手机上运行 Python 不再是梦[通俗易懂]

    手机最强 Python 编程神器,在手机上运行 Python 不再是梦[通俗易懂]手机编程软件有很多,大部分都很难使用,操作不灵活,甚至不能安装第三方库。尝试安装了很多Python移动编程软件,发现了很多问题,不是编码效率低就是各种bug。今天,来自一位python编程小哥指导,向大家推荐两款精心挑选的手机编程软件,它们也是非常成熟的手机编程工具。QPythonOHQpython是一个轻量级的、成熟的python编程工具。它配有终端和简单的代码编辑器。它支持安装第三方库。目前,它支持Python3.6.6,这还不算太老。代码编辑区域代码比其他手机编程软件更灵活,底

    2022年8月12日
    7
  • IntelliJ IDEA 第一个 Scala 程序

    IntelliJ IDEA 第一个 Scala 程序

    2021年6月28日
    114
  • 煤矿井下电气作业培训考试题库_煤矿电工学题库

    煤矿井下电气作业培训考试题库_煤矿电工学题库题库来源:安全生产模拟考试一点通公众号小程序煤矿井下电气免费试题根据新煤矿井下电气考试大纲要求,安全生产模拟考试一点通将煤矿井下电气模拟考试试题进行汇编,组成一套煤矿井下电气全真模拟考试试题,学员可通过煤矿井下电气作业考试题库全真模拟,进行煤矿井下电气自测。1、【多选题】电气设备长期过载会扩展成()故障。(AC)A、短路B、欠压C、漏电D、断相2、【多选题】短路电流的大小与()有关。(BCDE)A、电动机的额定功率B、电缆的长度C、电缆的截面D、电网电压E、变压器

    2026年4月15日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号