一,介绍
定义:
触发器是一种与表相关联的特殊存储过程,当特定事件(如INSERT、UPDATE、DELETE)在表上发生时,自动触发执行。它通常用于强制业务规则、维护数据一致性或记录日志。
核心特性:
- 事件驱动:绑定到表的增、删、改操作。
- 触发时机:
BEFORE(操作前触发)或AFTER(操作后触发)。 - 行级触发:对每一行数据变更触发一次(如批量更新会触发多次)。
- 不可显式调用:完全由数据库事件自动触发。
注意:现在触发器只支持行级触发,不支持语句级触发。
- 行级触发-->五条记录被修改,触发5次
- 语句级触发-->执行一次update等操作不管影响多少行,都只触发一次
二,触发器类型
| 触发器类型 | New和old |
|---|---|
| insert型触发器 | new表示将要,或者已经新增的数据 |
| update型触发器 | old表示修改之前的数据,new表示将要或者已经修改后的数据 |
| delete型触发器 | old表示将要或者已经删除的数据 |
三,触发器语法
-
创建触发器
create trigger 触发器名 before/after insert/update/delete on 表名 for each row begin -->SQL逻辑; end;注意:
for each row代表的是行级触发器- 如果是要在增删改之前触发就选
before,在增删改之后触发就选after insert/update/delete代表的是触发器根据的是插入,更新,删除中其中一种作为触发方式mysql暂时只支持行级触发器
-
查看触发器
show triggers; -
删除触发器
drop trigger [数据库名.]触发器名; #如果没有指定数据库名就默认为当前数据库
四,old和new
当我们要获取新插入数据的id
new.id
要获取更新数据之前id值
old.id
- insert类型触发器只有new参数
- delete类型触发器只有old参数
- update类型触发器既有new参数也有old参数
关键对象:
NEW: 在INSERT和UPDATE中表示新数据行,可通过NEW.column_name访问字段值。OLD: 在UPDATE和DELETE中表示旧数据行,可通过OLD.column_name访问字段值。