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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm mac 激活码【2021最新】

    (pycharm mac 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4M7HSKPBXS-eyJsa…

    2022年3月29日
    258
  • MyEclipse6.5安装SVN插件的三种方法 .

    MyEclipse6.5安装SVN插件的三种方法 .一、安装方法:方法一、如果可以上网可在线安装1.打开Myeclipse,在菜单栏中选择Help→SoftwareUpdates→FindandInstall;2.选择Searchfornewfeaturestoinstall,点击Next进入下一步;3.点击”NewRemoteSite”按钮,在弹出的对话框中输入:name:SVN

    2022年7月20日
    17
  • django配置文件详解_django实时读取日志

    django配置文件详解_django实时读取日志前言django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪、错误代码之类的详细信息。log

    2022年7月31日
    10
  • 使用rz与sz 实现服务器与Windows的文件传输

    使用rz与sz 实现服务器与Windows的文件传输

    2021年5月31日
    91
  • cloudsim仿真平台扩展的例子_云平台虚拟化技术

    cloudsim仿真平台扩展的例子_云平台虚拟化技术http://1.johnhome.sinaapp.com/?p=257幻灯片1云计算仿真框架CloudSim介绍jiangzw#ihep.ac.cn(以下为本人某次报告做的调研的PPT及其它一些实践记录,为保证清晰度,一些插入的图片较大,可在新标签页中打开)本文基于 署名3.0中国大陆 许可协议发布,未经本人许可不得转载

    2022年10月10日
    3
  • oracle 用户赋权_oracle数据库创建只读用户

    oracle 用户赋权_oracle数据库创建只读用户ORACLE创建用户赋予权限删除用户oracle数据库的权限系统分为系统权限与对象权限。一.ORACLE默认管理员密码二.创建用户及密码。三.赋予权限。oracle数据库的权限系统分为系统权限与对象权限。系统权限(databasesystemprivilege)可以让用户执行特定的命令集。例如,createtable权限允许用户创建表,grantanyprivilege权限允许用户授予任何系统权限。对象权限(databaseobjectprivilege)可以让用户能

    2025年7月1日
    2

发表回复

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

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