当前位置:   article > 正文

MySQL 触发器_数据库触发器的时机

数据库触发器的时机

MySQL 触发器

MySQL 触发器(Trigger)是一种在数据库中定义的特殊类型的存储过程,它在指定的数据库表上自动执行,当满足特定的触发条件时,触发器会被激活并执行相应的操作。触发器通常用于在数据库表发生特定事件时,自动执行一些操作,如更新其他表的数据、记录日志等。

语法规则

创建触发器

在 MySQL 中,定义触发器遵循以下规则:

  1. 触发器类型: MySQL 支持 BEFOREAFTER 两种触发器类型BEFORE 触发器在触发事件之前执行,而 AFTER 触发器在触发事件之后执行。

  2. 触发事件: 触发器可以在指定的数据库表上监听多种触发事件,包括 INSERT(插入)、UPDATE(更新)和 DELETE(删除)。每个触发器只能针对一种事件。

  3. 触发时机: 在触发器类型为 BEFORE 的情况下,触发器在执行前被激活;而在触发器类型为 AFTER 的情况下,触发器在执行后被激活。

  4. 触发条件: 触发器可以定义触发的条件,即触发器执行的条件。例如,在 BEFORE INSERT 触发器中,可以定义在插入数据之前验证数据的条件。

  5. 触发操作: 触发器可以执行一系列 SQL 语句,包括数据的增删改操作、查询、记录日志等。在 BEFORE 触发器中,可以修改 NEW 对象的值(NEW 表示要插入或更新的新行)。在 AFTER 触发器中,可以使用 OLD 和 NEW 对象(OLD 表示要删除或更新的旧行,NEW 表示要插入或更新的新行)。

  6. 创建触发器: 使用 CREATE TRIGGER 语句来创建触发器。语法如下:

    CREATE TRIGGER trigger_name
    {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
    FOR EACH ROW
    BEGIN
        -- 触发器执行的操作
    END;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

以上是 MySQL 中定义触发器的基本规则。需要注意的是,触发器的创建和使用涉及到数据库的操作,需要具备相应的数据库权限。在使用触发器之前,应该慎重考虑触发器的设计和实现,确保其满足业务需求,并不会对数据库性能和数据完整性产生负面影响。

案例:

CREATE TABLE test_trigger
(
    id     INT PRIMARY KEY AUTO_INCREMENT,
    t_note VARCHAR(30)
);


CREATE TABLE test_trigger_log
(
    id    INT PRIMARY KEY AUTO_INCREMENT,
    t_log VARCHAR(30)
);

# 创建触发器
DELIMITER $
CREATE TRIGGER before_test_trigger_insert_tri
    BEFORE INSERT
    ON test_trigger
    FOR EACH ROW
BEGIN
    INSERT INTO test_trigger_log(t_log) VALUES ('before insert...');
END $
DELIMITER

# 测试
INSERT INTO test_trigger(t_note)
VALUES ('Tom...')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

查看触发器

可以使用以下两种方法来查看数据库中已经定义的触发器:

  1. 使用 SHOW TRIGGERS 命令:

    使用 SHOW TRIGGERS 命令可以查看当前数据库中已经定义的触发器列表。

    SHOW TRIGGERS;
    
    SHOW CREATE TRIGGER before_test_trigger_insert_tri;
    
    • 1
    • 2
    • 3

    这将返回一个结果集,其中包含数据库中所有触发器的信息,包括触发器名称、表名、事件类型、触发时间、触发语句等。

  2. 使用 INFORMATION_SCHEMA 视图:

    MySQL 中的 INFORMATION_SCHEMA 是一个数据库信息查询的元数据视图。你可以使用 INFORMATION_SCHEMA 视图来查看触发器的详细信息。

    # 从系统库的TRIGGERS表中查询触发器
    SELECT TRIGGER_NAME, EVENT_OBJECT_TABLE, ACTION_TIMING, EVENT_MANIPULATION, ACTION_STATEMENT
    FROM INFORMATION_SCHEMA.TRIGGERS
    # WHERE TRIGGER_SCHEMA = 'your_database_name';
    
    • 1
    • 2
    • 3
    • 4

    your_database_name 替换为你实际的数据库名称。这将返回与数据库中定义的所有触发器相关的信息,包括触发器名称、所在表、事件类型、触发时间、触发语句等。

删除触发器

DROP TRIGGER IF EXISTS before_test_trigger_insert_tri;
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/601951
推荐阅读
相关标签
  

闽ICP备14008679号