mysql 必知必会 (25触发器)之把书读薄

本文深入讲解MySQL触发器的原理及应用,包括触发器的基本概念、如何创建触发器、触发器支持的操作类型及其应用场景等。文章还提供了具体示例,如INSERT、DELETE和UPDATE触发器的实现方法。

25 使用触发器(表才支持触发器,视图不支持)

为什么使用触发器:

某个表发生改动时自动处理

 

什么是触发器?

MYSQL响应以下任意语句而自动执行的一条MYSQL语句

(或位于BEGIN和END语句之间的语句):

触发器只支持:   DELETE   INSERT    UPDATE  

 

创建触发器 CREATE TRIGGER

唯一名字 关联的表 响应活动       何时执行

CREATE TRIGGER newproduct    ---- 名字

AFTER  ---操作发生之后

INSERT  ON products  -

FOR EACH ROW  --插入行执行

SELECT ‘producted add’;   ---每插入成功一次显示一次

 

触发器按每个表每个事件每次地定义,每个表每个事件每次只允许一个触发器,因此每个表最多支持6个触发器(insert  update  delete的之前之后),单一触发器不能与多个事件或多个表关联,所以你需要一个对INSET和UPDATE操作执行的触发器,则应该定义两个触发器。

触发器失败:

BEFORE失败,msyql将不执行请求

BEFORE或语句本身失败,MYSQL将不执行AFTER触发器(若有的话)

 

INSERT触发器: 使用NEW的虚拟表:

Create trigger neworder

After

insert on orders

For each row

Select NEW.order_num;

 

DELETE触发器

引用一个OLD的虚拟表,访问被删除的行,OLD中的值只能读,不能更新

CREATE TRIGGER deleteorder

BEFORE DELETE ON orders

FOR EACH ROW

BEGIN

INSERT INTO archive_orders(order, order_date, cust_id)

VALUES(OLD.order_num, OLD.order_date, OLD.cust_id);

END;

UPDATE触发器:

引用一个OLD的虚拟表访问(UPDATE语句前)的值

引用一个NEW的虚拟表访问新更新值

 

CREATE TRIGGER updatevendor

BEFORE UPDATE ON vendors

FOR EACH ROW

SET NEW.vend_state = UPPER(NEW.vend_state)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值