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)

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

被折叠的 条评论
为什么被折叠?



