mysql触发器面试_MySQL使用触发器教程之喷面试官系列

#MYSQL#这是我第11篇MySQL教程了,从今天将开启MySQL教程之喷面试官系列。本篇的主要内容是MySQL触发器的介绍,阅读大概需要三分钟,请各位看官做好心理准备。

5fb83566db7f61ea0c66a230df9e4777.png

MySQL语句都是在被需要的时候切执行,存储过程也是如此,但是你想要知道,某条语句在事件发生时自动执行,你应该怎么办,比如每在数据库每添加一个顾客是,都要检查其电话号码是否正确。每订购一个产品时,都从库存数量中减去订购的数量。无论什么时候删除数据库的某一行时,都要在某个存档的表中保留一个副本。

10cb03aaf048399ff42a05a2aabad940.png

上面这些举的例子,他们的共同之处就是在他们被需要的时候去自动处理。这确切的说就是触发器。触发器是MySQL想要以DELETE.INSERT.UPDATE语句而自动执行的一条MySQL语句,或者位于BEGIN和END语句之间的一组语句。其他语句都不支持触发器。

触发器在创建的时候,需要给出4条信息,第一个是唯一触发器名,第二个是触发器关联的表,第三个是触发器应该响应的活动,第四个是触发器何时执行。触发器用CREATE TRIGGER语句创建,下面是一个简单的例子。

f9f89d72a65fd1158197be8d6d2b6819.png

CREATE TRIGGER 用来创建名为newproduct的新触发器。触发器可在一个操作发生之前或之后执行,这里给出了AFTER INSERT,所以触发器将在INSERT语句成功执行后执行。这个触发器还指定了FOREACH ROW,因此代码对每个插入行都会执行。

需要注意的是每个表最多支持6个触发器,单一的触发器不能与多个事件或多个表关联。所以如果你需要一个队INSERT和UPDATE操作执行的触发器,则应该定义两个触发器。

f358730dc7ade215e2847e325e20b572.png

下面将逐个介绍三种触发器,分别是INSERT触发器,DELETE触发器,UPDATE触发器。

在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被 插入的行; 在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改 被插入的值); 对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT 执行之后包含新的自动生成值。

DELETE触发器在DELETE语句执行之后或者执行之前,需要知道两个点,第一在DELETE触发器代码内,你可以引用应该名为OLD的虚拟表,访问被删除的行;第二点,OLD中的值全部都是只读的,不能跟新。

ced3190bb13478352d475d8398dfde66.png

在任意订单被删除前将执行此触发器。它使用一条INSERT语句 将OLD中的值(要被删除的订单)保存到一个名为archive_ orders的存档表中(为实际使用这个例子,你需要用与orders相同的列 创建一个名为archive_orders的表)。 使用BEFORE DELETE触发器的优点(相对于AFTER DELETE触发器 来说)为,如果由于某种原因,订单不能存档,DELETE本身将被放弃。

7831eab417c5df3b42ec83c5a73d8b20.png

UPDATE触发器需要注意以下几点。在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问 以前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新 更新的值; 在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改 将要用于UPDATE语句中的值);OLD中的值全都是只读的,不能更新。

591ced385cddba1bf5aa6469ee5a7a1e.png

触发器的一种非常有意义的使用是创建审计跟踪,使用触发器把更改记录到应该表示非常容易的,但是遗憾的是,MySQL触发器不支持CALL语句,这表示不能从触发器内部调用存储过程,所需要的存储过程代码需要复制到触发器内部。至于什么是存储过程,将在下篇介绍。

我们的口号是,MySQL从入门到喷面试官。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值