MySQL 触发器

MySQL 中的触发器是一组位于系统目录中的 SQL 语句。它是一种特殊类型的存储过程,可自动调用以响应事件。每个触发器都与一个表相关联,该表在任何 DML 语句(如INSERT、UPDATE或DELETE )上激活。

触发器被称为特殊过程,因为它不能像存储过程一样直接调用。触发器和过程之间的主要区别在于,当针对表进行数据修改事件时,会自动调用触发器。相反,必须显式调用存储过程。

根据SQL标准,触发器通常有两种类型:行级触发器和语句级触发器。

  • 行级触发器:它是一个触发器,它通过插入、更新或删除等触发语句为每一行激活。例如,如果一个表插入、更新或删除了多行,则会为受insertupdatedelete 语句影响的每一行自动触发行触发器。
  • 语句级触发器:它是一个触发器,无论插入、更新或删除多少行,都会为表上发生的每个事件触发一次。

注意:我们应该知道 MySQL 不支持语句级触发器。它仅提供对行级触发器的支持。

一、为什么我们需要在MySQL中使用触发器?

由于以下特性,我们需要使用 MySQL 中的触发器:

  • 触发器帮助我们执行业务规则。
  • 触发器可以帮助我们在插入或更新数据之前验证数据。
  • 触发器帮助我们保留记录日志,例如在表中维护审计跟踪。
  • SQL 触发器提供了另一种检查数据完整性的方法。
  • 触发器提供了另一种运行计划任务的方法。
  • 触发器提高了 SQL 查询的性能,因为它不需要在每次执行查询时都进行编译。
  • 触发器减少了节省时间和精力的客户端代码。
  • 触发器帮助我们在不同平台上扩展我们的应用程序。
  • 触发器易于维护。

二、在 MySQL 中使用触发器的限制 

  • MySQL 触发器不允许使用所有验证;他们只提供扩展验证。例如,我们可以使用 NOT NULL、UNIQUE、CHECK 和 FOREIGN KEY 约束进行简单的验证。
  • 触发器从客户端应用程序以不可见的方式调用和执行。因此,对数据库层发生的事情进行故障排除并不容易。
  • 触发器可能会增加数据库服务器的开销。

三、MySQL 中的触发器类型? 

我们可以以触发器的形式定义最多六种类型的动作或事件:

  1. 插入前:在向表中插入数据之前激活。
  2. 插入后:在表中插入数据后激活。
  3. 更新前:在表中数据更新前激活。
  4. 更新后:表中数据更新后激活。
  5. 删除前:在从表中删除数据之前激活。
  6. 删除后:从表中删除数据后激活。

当我们使用不使用 INSERT、UPDATE 或 DELETE 查询的语句来更改表中的数据时,与该触发器关联的触发器将不会被调用。

四、触发器命名约定

命名约定是我们为给出适当的唯一名称而遵循的一组规则。它可以节省我们的时间来保持工作的组织性和可理解性。因此,我们必须为与表关联的每个触发器使用唯一的名称。但是,为不同的表定义相同的触发器名称是一种很好的做法。

应使用以下命名约定来命名MySQL中的触发器:

(BEFOR | AFTER) table_name (INSERT | UPDATE | DELETE)  

触发器激活时间: BEFORE | AFTER

触发事件: INSERT | UPDATE| DELETE

五、如何在 MySQL 中创建触发器?

我们可以使用CREATE TRIGGER语句在 MySQL 中创建新触发器。下面是在 MySQL 中创建触发器的语法:

CREATE TRIGGER trigger_name    
    (AFTER | BEFORE) (INSERT | UPDATE | DELETE)  
         ON table_name FOR EACH ROW    
         BEGIN    
        --variable declarations    
        --trigger code    
        END; 

 

热门文章

优秀文章