MySQL AFTER DELETE触发器

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

一、MySQL AFTER DELETE触发器 语法

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

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

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

  • 首先,我们将指定要创建的触发器的名称。它在架构中应该是唯一的。
  • 其次,我们将指定触发动作时间,应该是AFTER DELETE。在表上发生每一行更改后,将调用此触发器。
  • 第三,我们将指定与触发器关联的表的名称。它必须写在 ON 关键字之后。如果我们没有指定表名,触发器将不存在。
  • 最后,我们将指定触发器主体,其中包含在触发器被激活时执行的语句。

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

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

限制

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

二、MySQL AFTER DELETE触发器 示例

让我们通过一个示例来了解如何使用MySQL 中的 CREATE TRIGGER 语句创建 AFTER DELETE 触发器。

假设我们创建了一个名为salary的表来存储员工的工资信息,如下所示:

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 查询以查看表数据。

第三,我们将创建另一个名为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 语句来验证表:

然后,我们将创建一个 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 ;  

在这个触发器中,我们首先指定了触发器名称 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;  

在输出中,我们可以看到删除的工资减少了 total_budget。

第三,我们将从薪水表中删除所有数据:

mysql> DELETE FROM salaries;  

同样,我们将从 total_salary_budget 表中查询数据。我们可以看到触发器在执行查询后将表更新为零。请参阅以下输出:

四、如何在 MySQL Workbench中创建 AFTER DELETE 触发器?

要使用此工具创建插入后触发器,我们首先需要启动MySQL Workbench并使用我们之前创建的用户名和密码登录。我们将得到如下画面:

现在执行以下步骤来创建 AFTER DELETE 触发器:

1. 转到 Navigation 选项卡并单击包含MySQL服务器中所有可用数据库的Schema 菜单。

2. 选择数据库(例如employeedb),双击它会显示包含表、视图、函数和存储过程的子菜单。请参阅下面的屏幕。

3. 展开表子菜单并选择要在其上创建触发器的表。选择表后,右键单击所选表(例如,salary),然后单击Alter Table选项。见下图:

4. 点击Alter Table选项,屏幕如下:

5. 现在,单击上一节红色矩形框中显示的Trigger选项卡,然后选择 Timing/Event AFTER DELETE。我们会注意到有一个 (+) 图标按钮来添加触发器。单击该按钮,我们将根据选择时间/事件在触发器上获得默认代码:

6. 现在,完成触发器代码,再次检查它们,如果没有发现错误,单击应用按钮。

7.点击Apply按钮后,点击Finish按钮完成。

8. 如果我们查看模式菜单,我们可以看到salaries表下的薪金_AFTER_DELETE触发器如下:

热门文章

优秀文章