I. 触发器 Trigger
触发器(Trigger) 是与表有关的数据库对象,在满足定义的条件时触发,并执行触发器中定义的语句集合.
换句话说, 触发器是定义在表上的,定义这个触发器时需要指定三个条件:
- 什么条件触发?
- Insert
- Delete
- Update
- 什么时候触发?
- Before
- After
- 触发频率
- For each row
所以, 触发器也就是当某个事件发生的时候, 去触发另外一个操作, 事件包括 Insert 语句, Update 语句和 Delete语句. 触发器常用来保证数据表的一致性.
注意:
- 触发器是定义在表上的对象,所以不能定义在view上
- 由于触发器的频率是针对每一行的,所以是很消耗资源的,要尽量减少触发器的使用
- 在频繁增删改的表上,不要使用触发器,非常消耗资源
II. 创建触发器
1. 语法
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
trigger_time: { BEFORE | AFTER }
trigger_event: { INSERT | UPDATE | DELETE }
trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
BEFORE|AFTER
: 指定触发的时间, 在事件发生之前或之后FOR EACH ROW
: 表示任何一条记录上的操作满足触发事件都会触发触发器trigger_order
: 用于定义多个触发器,使用 follow 或者 precedes 来选择触发器的先后的执行顺序
触发器的触发顺序是 BEFORE 触发器 --> 行操作 --> AFTER 触发器
III. 查看触发器
-- show triggers
SHOW TRIGGERS;
--在 information_schema.triggers表中查看
SELECT * FROM information_schema.triggers;
IV. 删除触发器
1.语法
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
删除触发器之前建议先查看一下
V. 触发器示例
假设有一张表叫 job_entity
,其中记录了 job 的信息, 并且有一个字段 update_time
, 我们希望当每一个 job 被更新状态的时候, update_time 可以记录最后一次更新的时间, 我们可以创建一个触发器
-- create a function
CREATE FUNCTION sync_last_update() RETURNS trigger AS $$
BEGIN
NEW.update_time := NOW();
RETURN NEW;
END;
$$
-- create trigger on job_entity
CREATE TRIGGER
job_sync_last_update
BEFORE UPDATE ON
job_entity
FOR EACH ROW EXECUTE PROCEDURE
sync_last_update();
Share this on