MySQL 触发器

MySQL 触发器

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

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

一般来说, 根据 SQL 标准,触发器有两种类型:行级触发器和语句级触发器。

行级触发器: 这是一种触发器,它通过触发语句(如插入、更新或删除)为每一行激活。例如,如果表中插入、更新或删除多行数据,行触发器会自动为受影响的每一行触发。

语句级触发器: 这是一种触发器,它在发生在表上的每个事件中触发,无论插入、更新或删除多少行数据。

注意:我们应该知道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;   

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程