数据库触发器
来源:互联网 发布:淘宝助理5怎么上传图片 编辑:程序博客网 时间:2024/06/14 05:18
触发器
想要某条语句在事件发生时自动执行(某表发生改动时,自动处理)
除下列三个关键字意外的不支持触发器
- INSERT
- DELETE
- UPDATE
创建触发器
创建触发器时,需要给出四条信息:
- 唯一的触发器名
- 触发器关联的表
- 触发器应该响应的活动(INSERT、DELETE、UPDATE)
触发器何时执行(处理之前或之后)
触发器必须在每个表中唯一,但不是在每个数据库中唯一,这表示同一个数据库中的两个表的触发器可具有相同的名字。但最好在数据库中使用唯一的触发器名。
触发器用CREATE TRIGGER语句创建。例子:
CREATE TRIGGER newproduct AFTER INSERT ON productsFOR EACH ROW SELECT 'Product added';
分析:
CREATE TRIGGER用来创建名为newproduct的新触发器。触发器可在一个操作发生之前或之后,这里给出了AFTER INSERT,所以此触发器将在INSERT语句成功执行后执行。这个触发器还指定FOR EACH ROW,因此代码对每个插入行执行。文本Product added将对每个插入的行显示一次。
仅支持表
只有表才支持触发器,视图不支持(临时表也不支持)
触发器按每个表每个事件每次地定义,每个表每个事件每次只允许一个触发器。因此,每个表最多支持6个触发器(每条UPDATE、DELETE、INSERT)。单一触发器不能与多个事件或多个表关联。
删除触发器
DROP TRIGGER newproduct;
触发器不能更新或覆盖。为了修改一个触发器,必须先删除它。然后再重新创建。
INSERT触发器
- INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行
- 在BEFORE INSERT触发器中,NEW中的值也可被更新
- 对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT之后包含新的自动生成值。
CREATE TRIGGER neworder AFTER INSERT ON ordersFOR EACH ROW SELECT NEW.order_num;
创建一个名为neworder的触发器,它按照AFTER INSERT ON orders执行。在插入一个新订单到orders表时,MySQL生成一个新订单号并保存到order_num中。触发器从NEW.order_num取得这个值并返回它。此触发器必须按AFTER INSERT执行,因为在BEFORE INSERT语句执行前,新order_num还没有生成。对于orders每次插入使用这个触发器总是返回新的订单号。
为测试这个触发器,试插入一下新行
INSERT INTO orders(order_date,cust_id)VALUES(NOW(),10001);#输出order_num20010
DELETE触发器
- DELETE 触发器在DELETE语句执行之前或之后执行。
- DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行
- OLD中的值全部都是只读的,不能更新。
CREATE TRIGGER deleteorder BEFORE DELETE ON ordersFOR EACH ROWBEGIN INSERT INTO archive_orders(order_num,order_date,cust_id) VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);END;
任意订单被删除前将执行此触发器。它使用一条INSERT语句将OLD中的值保存到一个名为archive_orders的存档表中(为实际使用这个例子,你需要用于orders相同的列创建一个名为archive_orders的表)
UPDATE触发器
- 在UPDATE触发器代码中,你可引用一个名为OLD的虚拟表访问以前的值,引用一个名为NEW的虚拟表访问新更新的值。
- 在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值)
- OLD中的值全都是只读的,不能更新。
- 数据库触发器
- 数据库触发器
- 数据库触发器
- 数据库触发器
- 数据库触发器
- 数据库触发器
- 数据库触发器
- 数据库触发器
- 触发器 数据库
- 数据库触发器
- 数据库触发器
- 数据库---触发器
- 数据库触发器
- 数据库触发器
- 数据库-触发器
- 数据库触发器
- 数据库触发器
- 数据库触发器
- 找出这个图形的规律,并输出一个n行m列的图形
- jupyter notebook使用技巧
- 理解浏览器代理设置的意义-IP代理栽坑- SwichySharp
- 在eclipse中使用Lombok
- gensim 计算句子相似性
- 数据库触发器
- No enum constant com.you.example.EnumExample.Season.
- wikioi 3027 线段覆盖2
- 正则表达式-常用
- 嵌入式Linux开发工具
- 多态 —基类指针
- 【Android】透明状态栏在App中的实现与接口设计
- Mac的U盘自动到底挂载到何处?
- 没有 libgdiplus.so.0的问题解决