MySQL AFTER DELETE触发器
在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关键字之后写。如果我们没有指定表名,就不会有触发器存在。
- 最后,我们将指定包含在触发器激活时执行的语句的 触发器主体 。
如果我们想要执行多个语句,我们将使用包含一组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”触发器中访问旧的行,但不能更新它们。
- 我们无法访问新的行。这是因为不存在新的行。
- 我们无法在视图上创建“AFTER DELETE”触发器。
“AFTER DELETE”触发器示例
让我们通过一个示例来理解如何使用MySQL的“CREATE TRIGGER”语句创建一个“AFTER DELETE”触发器。
假设我们已经创建了一个名为“salaries”的表,用于存储雇员的薪资信息,如下所示:
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 的表格,用来存储salaries表中的薪资信息。
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触发器,在从salaries表中删除一行后,将总工资更新到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;
在输出中,我们可以看到删除的薪水减少了总预算。
第三,我们将从薪水表中删除所有数据:
mysql> DELETE FROM salaries;
再次,我们将从total_salary_budget表中查询数据。我们可以看到在查询执行后,触发器将表更新为零。请参见下方输出:
如何在MySQL Workbench中创建“删除后触发器”?
使用此工具创建“插入后触发器”,我们首先需要启动MySQL Workbench并使用之前创建的用户名和密码登录。我们将获得以下屏幕:
现在根据以下步骤创建一个AFTER DELETE触发器:
1. 转到导航选项卡,点击包含所有可用数据库的 模式菜单 内的 MySQL 服务器。
2. 选择数据库(例如, employeedb ),双击显示包含表、视图、函数和存储过程的 子菜单 。参见下面的屏幕截图。
3. 展开 Tables 子菜单并选择要创建触发器的表。选择表后,右键单击选定的表(例如 salaries ),然后点击 Alter Table 选项。请参见下面的图像:
4. 单击 Alter Table 选项将显示如下屏幕:
现在,点击前一节中显示的红色矩形框内的 ** 触发器 标签页 ** ,然后选择Timing/Event 删除之后 . 我们会注意到有一个(+)图标按钮可以添加触发器。点击该按钮,我们将根据选择的Timing/Event得到一个默认的触发器代码:
6. 现在,完成触发器代码,再次审查它们,如果没有错误,点击 行动 按钮。
7. 单击 “Apply” 按钮后,请单击 “Finish” 按钮 完成操作。
8. 如果我们查看模式菜单,我们会看到在 salaries 表下的 salaries_AFTER_DELETE 触发器如下所示: