📅  最后修改于: 2023-12-03 14:57:25.375000             🧑  作者: Mango
在关系数据库中,触发器是一种特殊类型的存储过程,用于在数据发生变化时自动执行一些操作。这些操作可以是修改数据、调用存储过程、发送邮件等等。
在MySQL中,可以使用以下语法创建触发器:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
trigger_body
其中,trigger_name
为触发器名称,{BEFORE | AFTER}
表示触发时机(在数据插入、更新或删除之前或之后),{INSERT | UPDATE | DELETE}
表示触发的事件(数据插入、更新或删除),table_name
为触发器所属的表名,[FOR EACH ROW]
表示当前触发器针对每一行数据执行,trigger_body
为具体触发器操作。
例如,以下语句表示在学生成绩表中插入新数据时触发一个名为trig_insert_score
的触发器:
CREATE TRIGGER trig_insert_score
AFTER INSERT
ON score_table
FOR EACH ROW
BEGIN
UPDATE user_table SET score_sum = score_sum + NEW.score WHERE user_id = NEW.user_id;
END;
这个触发器会在每次插入新的成绩数据时,将该学生的成绩总和更新到用户表中。
在触发器体内可以执行各种操作,包括修改数据、插入数据、删除数据、调用存储过程等等。在MySQL中,一些内置函数也可以被用于触发器体内。
例如,以下语句表示在学生成绩表中删除数据时触发一个名为trig_delete_score
的触发器:
CREATE TRIGGER trig_delete_score
BEFORE DELETE
ON score_table
FOR EACH ROW
BEGIN
UPDATE user_table SET score_sum = score_sum - OLD.score WHERE user_id = OLD.user_id;
END;
这个触发器会在每次删除成绩数据时,将该学生的成绩总和从用户表中减去。