十,触发器

164 阅读2分钟

一,介绍

定义: 触发器是一种与相关联的特殊存储过程,当特定事件(如INSERTUPDATEDELETE)在表上发生时,自动触发执行。它通常用于强制业务规则、维护数据一致性或记录日志。

核心特性

  • 事件驱动:绑定到表的增、删、改操作。
  • 触发时机BEFORE(操作前触发)或 AFTER(操作后触发)。
  • 行级触发:对每一行数据变更触发一次(如批量更新会触发多次)。
  • 不可显式调用:完全由数据库事件自动触发。

注意:现在触发器只支持行级触发,不支持语句级触发。

  • 行级触发-->五条记录被修改,触发5次
  • 语句级触发-->执行一次update等操作不管影响多少行,都只触发一次

二,触发器类型

触发器类型New和old
insert型触发器new表示将要,或者已经新增的数据
update型触发器old表示修改之前的数据,new表示将要或者已经修改后的数据
delete型触发器old表示将要或者已经删除的数据

三,触发器语法

  1. 创建触发器

    create trigger 触发器名
    before/after insert/update/delete
    on 表名 for each row   
    begin
    	-->SQL逻辑;
    end;
    

    注意:

    1. for each row代表的是行级触发器
    2. 如果是要在增删改之前触发就选before,在增删改之后触发就选after
    3. insert/update/delete 代表的是触发器根据的是插入,更新,删除中其中一种作为触发方式
    4. mysql暂时只支持行级触发器
  2. 查看触发器

    show triggers;
    
  3. 删除触发器

    drop trigger [数据库名.]触发器名; #如果没有指定数据库名就默认为当前数据库
    

四,old和new

当我们要获取插入数据的id

new.id

要获取更新数据之前id值

old.id
  1. insert类型触发器只有new参数
  2. delete类型触发器只有old参数
  3. update类型触发器既有new参数也有old参数

关键对象

  • NEW: 在 INSERTUPDATE 中表示新数据行,可通过 NEW.column_name 访问字段值。
  • OLD: 在 UPDATEDELETE 中表示旧数据行,可通过 OLD.column_name 访问字段值。