什么是MySql触发器?作用是什么? 您所在的位置:网站首页 滤镜使用的意义和作用是什么意思 什么是MySql触发器?作用是什么?

什么是MySql触发器?作用是什么?

2024-07-09 10:35| 来源: 网络整理| 查看: 265

由于项目经理临时有事,被安排面试一个新人,期间聊到了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,当然,实际开发过程中减去的具体值,需要是订单购买数量值),看如下过程:

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

触发器创建的四个要素 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

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有