我很难理解“行级触发器”和“语句级触发器”之间的区别。
根据我的理解,在创建语句级触发器的场景中,整个表都可以修改。行级触发器只允许我修改受触发器的指定事件影响的元组。
这是正确的吗?有谁有这两个的例子吗?
发布于 2012-08-08 06:57:34
您可能希望在客户端执行修改了一百万行的语句(语句级触发器)后执行一次触发器操作。或者,您可能希望为修改的每一行触发一次操作(行级触发器)。
示例:假设你有一个触发器,可以确保所有高中生都能毕业。也就是说,当高年级学生的成绩是12分时,我们将其提高到13分,我们希望将成绩设置为NULL。
对于语句级触发器,您可以这样说:在递增级别语句运行后,检查整个表一次,将级别为13的nows更新为NULL。
对于行级触发器,您会说,在更新的每一行之后,如果新行的评分为13,则将新行的评分更新为NULL。
语句级触发器将如下所示:
create trigger stmt_level_trigger
after update on Highschooler
begin
update Highschooler
set grade = NULL
where grade = 13;
end;行级触发器将如下所示:
create trigger row_level_trigger
after update on Highschooler
for each row
when New.grade = 13
begin
update Highschooler
set grade = NULL
where New.ID = Highschooler.ID;
end;注意,SQLite不支持语句级触发器,因此在SQLite中,FOR EACH ROW是可选的。
发布于 2019-04-18 00:55:33
1)行级触发器用于在插入、更新或删除时对一组行执行操作
示例:-您必须删除一组行,同时还必须将已删除的行插入到新表中以进行审计;
2)语句级触发器:-一般用于对正在执行的事件进行限制。
示例:-限制在晚上10点到早上6点之间删除数据;
希望这能有所帮助:)
发布于 2014-05-27 14:00:44
语句级触发器的主要区别如下:
语句级触发器:基于名称,如果执行任何语句,它都会起作用。不依赖于effected.It只执行一次的行数或任何行。Exp :如果你想从HR部门更新每个员工的薪水,最后你想知道有多少行受到影响意味着多少行得到了加薪,那么就使用语句级触发器。请注意,即使零行被更新,触发器也会执行,因为它是语句级触发器,如果执行了任何语句,就会调用触发器。它是否影响任何行都无关紧要。
行级触发器:每次行受到影响时执行。如果零行affected.no行级触发器将execute.suppose如果你想从emp表中删除一个部门是HR的雇员,并且你想尽快从emp表中删除员工,那么你应该选择行级触发器。
https://stackoverflow.com/questions/10167346
复制相似问题