首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >行级触发器与语句级触发器

行级触发器与语句级触发器
EN

Stack Overflow用户
提问于 2012-04-16 08:15:46
回答 5查看 123.3K关注 0票数 56

我很难理解“行级触发器”和“语句级触发器”之间的区别。

根据我的理解,在创建语句级触发器的场景中,整个表都可以修改。行级触发器只允许我修改受触发器的指定事件影响的元组。

这是正确的吗?有谁有这两个的例子吗?

EN

回答 5

Stack Overflow用户

发布于 2012-08-08 06:57:34

您可能希望在客户端执行修改了一百万行的语句(语句级触发器)后执行一次触发器操作。或者,您可能希望为修改的每一行触发一次操作(行级触发器)。

示例:假设你有一个触发器,可以确保所有高中生都能毕业。也就是说,当高年级学生的成绩是12分时,我们将其提高到13分,我们希望将成绩设置为NULL

对于语句级触发器,您可以这样说:在递增级别语句运行后,检查整个表一次,将级别为13的nows更新为NULL

对于行级触发器,您会说,在更新的每一行之后,如果新行的评分为13,则将新行的评分更新为NULL

语句级触发器将如下所示:

代码语言:javascript
复制
create trigger stmt_level_trigger
after update on Highschooler
begin
    update Highschooler
    set grade = NULL
    where grade = 13;
end;

行级触发器将如下所示:

代码语言:javascript
复制
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是可选的。

票数 24
EN

Stack Overflow用户

发布于 2019-04-18 00:55:33

1)行级触发器用于在插入、更新或删除时对一组行执行操作

示例:-您必须删除一组行,同时还必须将已删除的行插入到新表中以进行审计;

2)语句级触发器:-一般用于对正在执行的事件进行限制。

示例:-限制在晚上10点到早上6点之间删除数据;

希望这能有所帮助:)

票数 4
EN

Stack Overflow用户

发布于 2014-05-27 14:00:44

语句级触发器的主要区别如下:

语句级触发器:基于名称,如果执行任何语句,它都会起作用。不依赖于effected.It只执行一次的行数或任何行。Exp :如果你想从HR部门更新每个员工的薪水,最后你想知道有多少行受到影响意味着多少行得到了加薪,那么就使用语句级触发器。请注意,即使零行被更新,触发器也会执行,因为它是语句级触发器,如果执行了任何语句,就会调用触发器。它是否影响任何行都无关紧要。

行级触发器:每次行受到影响时执行。如果零行affected.no行级触发器将execute.suppose如果你想从emp表中删除一个部门是HR的雇员,并且你想尽快从emp表中删除员工,那么你应该选择行级触发器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10167346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档