如何使用触发器?
【摘要】 使用触发器 触发器发生什么事情之后或之前,会自动执行某条语句,这就是触发器 创建触发器创建触发器要给出的4条关键信息:1.唯一的触发器名2.触发器关联的表3.触发器应该响应的活动(DELETE,INSERT or UPDATE)4.触发器何时执行(处理之前or之后)CREATE TRIGGER语句创建触发器CREATE TRIGGER newproduct AFTER INSERT ON ...
使用触发器
触发器
发生什么事情之后或之前,会自动执行某条语句,这就是触发器
创建触发器
创建触发器要给出的4条关键信息:
1.唯一的触发器名
2.触发器关联的表
3.触发器应该响应的活动(DELETE,INSERT or UPDATE)
4.触发器何时执行(处理之前or之后)
CREATE TRIGGER语句创建触发器
CREATE TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW
SELECT 'Product added';
FOR EACH ROW 代码对每个插入行执行。
删除触发器
DROP TRIGGER newproduct;
使用触发器
INSERT触发器
INSERT触发器在INSERT语句执行之前或之后执行。需要知道一下几点:
- 在INSERT触发器的代码内,可引用一个名为NEW 的虚拟表,访问被插入的行。
- 在BEFORE INSERT触发器中,NEW中 的值也可以被更新(允许更改被插入的值)
- 对于AUTO_INCREMENT列,NEW 在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
CREATE TEIGGER neworder AFTER INSERT ON orders
FOR EACH ROW SELECT NEW.order_num;
这个触发器讲了咋个事情呢?你不要觉得云里雾里的,我们知道这个INSERT是不会显示什么信息出来的,所以我们加一个 AFTER INSERT
就是你只要一插入,我们就读出来这个订单号显示出来。就是这么一个功能,你不要想的太复杂了。所以你只能AFTER昂,BEFORE你能读出来个啥。
DELETE触发器
你也需要知道几点:
- 在DELETE触发器的代码中,你可以引用一个名为OLD的虚拟表,访问被删除的行。
- OLD中的值全都是只读,不能更新。
例:演示使用OLD保存将要删除的行到一个存档表中。
CREATE TRIGGER deleteorder BEFORE DELETE ON oreders
FOR EACH ROW
BEGIN
INSERT INTO archive_orders(order_num,order_date,cust_id)
VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);
END;
UPDATE触发器
注意几点:
-
在UPDATE触发器代码中,你可以引用一个OLD的虚拟表访问以前的值,引用一个名为NEW的虚拟表访问更新的值。
-
在BEFORE UPDATE触发器中,NEW中的值可能也被更新
-
OLD中的全是只读的。
例:保证州名缩写总是大写
CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors
FOR EACH ROW SET NEW.vend_state = Upper(New.vend_state);
:o:这个例子我想说一下,它这个的话就意味着我们对这个NEW的改变是会影响到实际表中的。这点应该注意到。
触发器的进一步介绍
MySQL触发器是不支持CALL语句的,这是十分遗憾的,所需的存储过程的代码需要复制到触发器内。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)