MYSQL必知必会读书笔记 第二十五章 使用触发器
来源:互联网 发布:雅马哈机器人编程软件 编辑:程序博客网 时间:2024/05/06 16:56
创建触发器需要给出4条信息:
1. 唯一的触发器名;
2.触发器关联的表;
3.触发器应该响应的活动(D,I,U)
4.触发器何时执行(处理之前或之后)。
下面一个简单的例子
创建触发器:
CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';
后面的SELECT语句是插入显示的功能。
需要注意的是:只要表才支持触发器,视图是不支持触发器的,临时表也不支持。并且每个表的每个事件只允许一个触发器。因此每个表最多支持6个触发器。单一触发器不能与多个事件或多个表关联,所以,如果你需要一个对INSERT和UPDATE操作执行的触发器,则应该定义两个触发器。
如果BEFORE触发器失败,则MySQL将不执行请求的操作。此外,如果BEFORE触发器或语句本身失败,MySQL将不执行AFTER触发器(如果有的话)。
删除触发器:
DROP TRIGGER newproduct;
触发器不能更新和覆盖。为了修改触发器,必须先删除它,然后在重新创建。
INSERT 触发器
1.在INSERT触发器代码内,可引用一个名为NEW的虚拟表。访问被插入的行;
2.BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值);
3.对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num;
是BEFORE 还是AFTER ?通常,将BEFORE用于数据验证和净化(目的是保证插入表中的数据确实是需要的数据)
DELETE触发器:
1.DELETE触发器代码内,你可以引用一个名为OLD的虚拟表。访问被删除的行;
2.OLD中的值全都是只读的,不能更新。
CREATE TRIGGER deleteorder BEFORE DELETE ON orders 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;
使用BEFORE DELETE触发器的优点(相对于AFTER DELETE触发器来说),如果由于某种原因,订单不能存档,DELETE本身将被放弃。正如所见,触发器deleteorder触发器使用了BEGIN和END语句标记触发器体。这在此例子中并不是必须的,不过使用BEGIN END块的好处是触发器能容纳多条SQL语句。
UPDATE触发器
1.在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表,引用一个NEW的虚拟表访问新更新的值。
2.BEFORE UPDATE触发器中,NEW中的值可能也被更新。
3.OLD中的值全都是只读的,不能更新。
保证州名都是大写:
CREATE TRIGGER upatevendor BEFORE UPDATE ON vendors FOR EACH ROW SET NEW.vend_state=Upper(NEW.vend_state);
遗憾的是MySQL中触发器中不支持CALL语句。这表示不能从触发器内调用存储过程。
- MYSQL必知必会读书笔记 第二十五章 使用触发器
- MYSQL必知必会读书笔记 第二章
- MYSQL必知必会读书笔记 第二十四章 使用游标
- 第二十五章 世界需要和平--中介者模式(读书笔记)
- 《MySQL必知必会》学习笔记十五(触发器)------掌握部分
- 【mysql 触发器】触发器使用
- MYSQL必知必会读书笔记 第二十六章 管理事务处理
- MYSQL必知必会读书笔记 第二十七章 字符集和校对规则
- MYSQL必知必会读书笔记 第二十八章 用户授权
- MYSQL必知必会读书笔记 第二十九章 数据库维护
- 从零开始学mysql------------读书笔记触发器
- 《道德经》第二十五章
- MYSQL必知必会读书笔记 第二十二章 使用视图
- 读书笔记_C#技术内幕_第二十五章(字符串操作)(String类)
- 读书笔记_C#技术内幕_第二十五章(字符串操作)(StringBuilder,字符串格式化)
- 代码大全第二版读书笔记 第四部分-语句 十四、组织直线型代码 十五、使用条件语句
- MySQL触发器的使用
- MySQL触发器的使用
- 深入学习集合之HashMap实现原理
- 记录使用intellig idea遇到的问题
- Unity3d Andriod版本发布后lightmap失效
- hdu1890 Robotic Sort (splay+区间翻转单点更新)
- Xcode如何打包ipa安装包
- MYSQL必知必会读书笔记 第二十五章 使用触发器
- Android【Fresco】 使用的详解(二)
- iptables详解
- Nginx源码分析 ——Nginx的进程模型
- gitk安装
- oracle 数据库手动自动备份详解
- 简单http服务
- 作为一名开发者,我压力很大
- 深究AngularJS——ng-checked(回写:带真实案例代码)