程序员社区

MySQL系列教程 --- 91、MySQL 中的触发器

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

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

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

Row-Level Trigger:是一个触发器,通过insert、update、delete等触发语句为每一行激活。例如,如果一个表插入、更新或删除了多行,则行触发器会针对受插入、更新或删除语句影响的每一行自动触发。

Statement-Level Trigger:它是一个触发器,无论插入、更新或删除多少行,都会为表上发生的每个事件触发一次。

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

为什么我们需要/使用 MySQL 中的触发器?

由于以下功能,我们需要/使用 MySQL 中的触发器:

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

在 MySQL 中使用触发器的限制

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

MySQL 中的触发器类型?

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

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

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

命名约定

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

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

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

因此,

触发器激活时间: BEFORE | 后

触发事件: INSERT | 更新 | 删除

如何在 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;     
赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 91、MySQL 中的触发器

一个分享Java & Python知识的社区