MariaDB TRIGGER 是一种与表关联的特殊类型的存储过程,当该表发生特定事件时会自动执行。触发器必须与永久表关联。它不能与临时表或视图关联。

触发器名称存在于数据库命名空间中,这意味着所有触发器在数据库中必须具有唯一的名称。不同数据库中的触发器可以具有相同的名称。

注意:触发器和过程之间的主要区别在于,当表发生特定事件时会自动调用触发器。相反,必须显式调用存储过程。

创建触发器语句

MariaDB CREATE TRIGGER 语句用于创建触发器。 CREATE TRIGGER 需要与触发器关联的表的 TRIGGER 权限。

语法

在 MariaDB 中创建触发器的语法如下:

CREATE TRIGGER trigger_name    
  (AFTER | BEFORE) (INSERT | UPDATE | DELETE)  
    ON table_name FOR EACH ROW  
      
    BEGIN    
      -- 变量声明 
      -- 触发器代码    
    END; 

以上语句创建一个名为trigger_name 的触发器,该触发器与名为table_name 的表关联。关键字AFTER或BEFORE表示触发动作时间。关键字 INSERT、UPDATE 或 DELETE 表示触发事件。 FOR EACH ROW 之后的语句定义触发器主体;

MariaDB 中的触发器类型

在 MariaDB 中触发器有六种类型:

触发类型描述
插入前触发器在将数据插入表之前激活
插入后触发器在将数据插入表之后激活 
更新前触发器表中数据更新前激活
更新后触发器表中数据更新后激活
删除前触发器从表中删除数据前激活 
删除后触发器从表中删除数据后激活

删除触发器语句

一旦在 MariaDB 中创建了触发器,就可以使用 DROP TRIGGER 语句将其删除。 DROP TRIGGER 语句需要与触发器关联的表的 TRIGGER 权限。如果删除表,表的触发器也会被删除。

语法

在 MariaDB 中删除触发器的语法如下:

DROP TRIGGER [IF EXISTS] [database.]trigger_name; 

IF EXISTS 是一个可选参数,仅当触发器存在于数据库中时,它才会有条件地删除触发器。如果删除不存在的触发器,则会引发错误。

数据库名称是可选的。如果省略,触发器将从默认数据库中删除。上述语句删除名为 trigger_name 的触发器。

示例:

要从默认数据库中删除名为 sales_order_insert 的触发器,可以使用以下语句:

DROP TRIGGER sales_order_insert;