MySQL - 删除后触发

MySQL - 删除后触发 首页 / MySQL入门教程 / MySQL - 删除后触发

每当在表上触发删除事件时,都会自动调用MySQL中的AFTER DELETE触发器。在本文中无涯教程学习如何使用其语法和示例创建AFTER DELETE触发器。

语法

以下是在MySQL中创建 AFTER DELETE 触发器的语法:

CREATE TRIGGER trigger_name 
AFTER DELETE
ON table_name FOR EACH ROW
Trigger_body ;

AFTER DELETE触发器语法参数可以解释如下:

无涯教程网

  • 首先,将指定要创建的触发器的名称。它在架构中应该是唯一的。
  • 第二,将指定触发动作时间,该时间应为"删除后"。在表的每一行更改发生后,将触发此触发器。
  • 第三,将指定与触发器关联的表的名称。它必须写在ON关键字之后。如果不指定表名,则触发器将不存在。
  • 最后,将指定触发主体,其中包含在触发触发器时执行的语句。

如果要执行多个语句,将使用 BEGIN END 块,该块包含一组SQL查询,以定义触发器的逻辑。请参见以下语法:

DELIMITER $$ 
CREATE TRIGGER trigger_name AFTER DELETE
ON table_name FOR EACH ROW
BEGIN
   variable declarations
   trigger code
END$$
DELIMITER ;

限制条件

  • 可以访问OLD行,但是无法在AFTER DELETE触发器中更新它们。
  • 无法访问NEW行。这是因为不存在NEW行。
  • 无法在VIEW上创建AFTER DELETE触发器。

删除后触发示例

让无涯教程通过示例了解如何使用 MySQL中的CREATE TRIGGER语句创建AFTER DELETE触发器。

假设创建了一个名为薪金的表,用于存储员工的薪水信息,如下所示:

CREATE TABLE salaries (
    emp_num INT PRIMARY KEY,
    valid_from DATE NOT NULL,
    amount DEC(8 , 2 ) NOT NULL DEFAULT 0
);

接下来,无涯教程将使用以下语句将一些记录插入该表:

INSERT INTO salaries (emp_num, valid_from, amount)
VALUES
    (102, '2020-01-10', 45000),
    (103, '2020-01-10', 65000),
    (105, '2020-01-10', 55000),
    (107, '2020-01-10', 70000),
    (109, '2020-01-10', 40000);

执行SELECT查询以查看表数据。

MySQL AFTER DELETE Trigger

第三,将创建另一个名为 total_salary_budget 的表,该表将保留薪水表中的薪水信息。

CREATE TABLE total_salary_budget(
    total_budget DECIMAL(10,2) NOT NULL
);

第四,无涯教程将使用 SUM()函数,该函数从薪金表返回总薪水,并将此信息保留在total_salary_budget表中:

mysql> INSERT INTO total_salary_budget (total_budget)
SELECT SUM(amount) FROM salaries;

执行SELECT语句以验证表:

MySQL AFTER DELETE Trigger

然后,将创建一个AFTER DELETE触发器,在从工资表中删除一行后,将总工资更新到total_salary_budget表中。

DELIMITER $$

CREATE TRIGGER after_delete_salaries
AFTER DELETE
ON salaries FOR EACH ROW
BEGIN
   UPDATE total_salary_budget SET total_budget = total_budget - old.amount;
END$$ 

DELIMITER ;
MySQL AFTER DELETE Trigger

在此触发器中,无涯教程首先指定了触发器名称after_delete_salaries。然后,指定触发事件。第三,指定了与触发器关联的表名。最后,在触发器主体内编写了触发器逻辑,该逻辑在从工资表中删除一行后将总工资更新到total_salary_budget表中。

如何调用AFTER DELETE触发器?

首先,将使用以下语句从上面的触发器中删除工资表中的工资:

mysql> DELETE FROM salaries WHERE emp_num = 105;

接下来,将从total_salary_budget表中查询数据。无涯教程可以看到该表在执行查询后已被修改。请参见以下输出:

mysql> SELECT * FROM total_salary_budget;
MySQL AFTER DELETE Trigger

在输出中,可以看到删除的薪水减少了total_budget。

第三,将从薪金表中删除所有数据:

mysql> DELETE FROM salaries;

同样,将从total_salary_budget表中查询数据。无涯教程可以看到,执行查询后,触发器将表更新为零。请参见以下输出:

MySQL AFTER DELETE Trigger

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

朱赟的技术管理课 -〔朱赟〕

深入浅出区块链 -〔陈浩〕

从0开始学微服务 -〔胡忠想〕

透视HTTP协议 -〔罗剑锋(Chrono)〕

编译原理之美 -〔宫文学〕

Redis核心技术与实战 -〔蒋德钧〕

深入剖析Java新特性 -〔范学雷〕

手把手带你搭建推荐系统 -〔黄鸿波〕

超级访谈:对话道哥 -〔吴翰清(道哥)〕

好记忆不如烂笔头。留下您的足迹吧 :)