沃梦达 / IT编程 / 数据库 / 正文

MySQL数据库 触发器 trigger

MySQL数据库 触发器(trigger)是一种特殊的存储过程,它在满足一定条件时被自动触发,常用于实现数据操作的自动化控制和数据唯一性的约束。

MySQL数据库 触发器(trigger)是一种特殊的存储过程,它在满足一定条件时被自动触发,常用于实现数据操作的自动化控制和数据唯一性的约束。

下面是MySQL数据库触发器的完整攻略:

触发器的创建

在MySQL中,我们可以通过CREATE TRIGGER语句来创建一个触发器。语法如下:

CREATE TRIGGER trigger_name
trigger_time trigger_event ON table_name FOR EACH ROW
BEGIN
-- 触发器主体部分,执行需要的动作
END;

其中,

  • trigger_name:触发器名称,自定义命名,遵循“字母+数字+下划线”的命名规则。
  • trigger_time:触发时机,包括BEFORE和AFTER两种,表示在触发事件之前或之后执行触发器中的代码。
  • trigger_event:触发事件,包括INSERT、UPDATE和DELETE三种,表示在数据插入、更新或删除时执行触发器中的代码。
  • table_name:触发操作的目标表名。
  • FOR EACH ROW:表示对每一行数据执行触发器操作。
  • BEGINEND之间的语句:触发器主体部分,执行需要的动作。

一条示例说明:

针对student表,在数据删除前输出删除的数据信息:

CREATE TRIGGER student_delete_trigger
BEFORE DELETE ON student_tbl FOR EACH ROW
BEGIN
    -- 输出删除信息
    INSERT INTO student_log_tbl (sid, student_name, delete_time)
    VALUES (OLD.sid, OLD.name, NOW());
END;

触发器的引用

在MySQL中,我们可以通过NEW和OLD关键字来引用插入、更新或删除操作中受影响的数据,分别表示新数据和旧数据。

  • 使用NEW关键字,可以引用插入和更新操作中的新数据列。
  • 使用OLD关键字,可以引用更新和删除操作中的旧数据列。

两条示例说明:

  1. 在student表中插入数据时,自动将学生姓名大写并插入到student_uppercase表中。
CREATE TRIGGER student_insert_trigger
AFTER INSERT ON student_tbl FOR EACH ROW
BEGIN
    -- 将NAME大写并插入到另一张表中
    INSERT INTO student_uppercase_tbl (name_upper) VALUES (UPPER(NEW.name));
END;
  1. 在student表中更新信息时,记录更新前后的姓名信息到student_log表中。
CREATE TRIGGER student_update_trigger
AFTER UPDATE ON student_tbl FOR EACH ROW
BEGIN
    -- 记录更新前后的姓名信息
    INSERT INTO student_log_tbl (sid, before_name, after_name, update_time)
    VALUES (NEW.sid, OLD.name, NEW.name, NOW());
END;

触发器的修改和删除

在MySQL中,我们可以通过ALTER TRIGGER语句来修改一个已有的触发器,通过DROP TRIGGER语句来删除一个触发器。语法如下:

-- 修改触发器
ALTER TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW
BEGIN
-- 触发器主体部分,执行需要的动作
END;

-- 删除触发器
DROP TRIGGER IF EXISTS trigger_name;

以上是关于MySQL数据库 触发器(trigger)的完整攻略。

本文标题为:MySQL数据库 触发器 trigger