MySQL AFTER DELETE触发器
简介:在本教程中,您将学习如何创建MySQL AFTER DELETE触发器来维护另一个表的摘要表。
MySQL AFTER DELETE触发器简介
在表上发生删除事件后,将自动调用MySQL AFTER DELETE触发器。
这是创建MySQL AFTER DELETE触发器的基本语法:
CREATE TRIGGER trigger_name AFTER DELETE ON table_name FOR EACH ROW trigger_body;
使用以下语法:
首先,在CREATE TRIGGER子句中指定要创建的触发器的名称。
其次,使用AFTER DELETE子句指定调用触发器的时间。
第三,在ON关键字之后指定与触发器关联的表的名称。
最后,指定触发器主体,其中包含一个或多个在调用触发器时执行的语句。
如果trigger_body中有多个语句,则需要使用BEGIN END块来包装它们,并在$$和;之间翻转默认定界符。
如下图所示:
DELIMITER $$ CREATE TRIGGER trigger_name AFTER DELETE ON table_name FOR EACH ROW BEGIN -- statements END$$ DELIMITER ;
在AFTER DELETE触发器中,您可以访问OLD行,但不能更改它。
请注意,AFTER DELETE触发器中没有NEW行。
MySQL AFTER DELETE触发器示例
考虑以下AFTER DELETE触发器示例。
设置样本表
首先,创建一个名为Salaries的新表:
DROP TABLE IF EXISTS Salaries; CREATE TABLE Salaries ( employeeNumber INT PRIMARY KEY, salary DECIMAL(10,2) NOT NULL DEFAULT 0 );
其次,在Salaries表中插入一些行:
INSERT INTO Salaries(employeeNumber,salary) VALUES (1002,5000), (1056,7000), (1076,8000);
第三,创建另一个名为SalaryBudgets的表,该表存储Salaries表中的工资总额:
DROP TABLE IF EXISTS SalaryBudgets; CREATE TABLE SalaryBudgets( total DECIMAL(15,2) NOT NULL );
第四,使用SUM()函数从Salaries表中获取总薪水并将其插入SalaryBudgets表中:
INSERT INTO SalaryBudgets(total) SELECT SUM(salary) FROM Salaries;
最后,从SalaryBudgets表中查询数据:
SELECT * FROM SalaryBudgets;
创建AFTER DELETE触发器示例
在从Salaries表中删除一行后,以下AFTER DELETE触发器将更新SalaryBudgets表中的总薪水:
CREATE TRIGGER after_salaries_delete AFTER DELETE ON Salaries FOR EACH ROW UPDATE SalaryBudgets SET total = total - old.salary;
在此触发器中:
首先,触发器的名称是在CREATE TRIGGER子句中指定的after_salaries_delete:
CREATE TRIGGER after_salaries_delete
其次,触发事件是:
AFTER DELETE
第三,与触发器关联的表是Salaries表:
ON Salaries FOR EACH ROW
最后,在触发器主体内,我们从总工资中减去已删除的工资。
测试MySQL AFTER DELETE触发器
首先,从Salaries表中删除一行:
DELETE FROM Salaries WHERE employeeNumber = 1002;
其次,从SalaryBudgets表中查询工资总额:
SELECT * FROM SalaryBudgets;
从输出中可以看到,总数减去删除的薪水。
第三,从薪水表中删除所有行:
DELETE FROM Salaries;
最后,从SalaryBudgets表中查询总数:
SELECT * FROM SalaryBudgets;
触发器将总数更新为零。
在本教程中,您学习了如何创建MySQL AFTER DELETE触发器来维护另一个表的摘要表。