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

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

根据我的理解,在这种情况下,语句级触发器是创build的,整个表都可以修改。 行级触发器只允许我修改由触发器的特定事件影响的元组。

它是否正确? 有没有人有这两个例子?

谢谢!

主要区别是什么可以通过触发器来修改,这取决于DBMS。 触发器(行或语句级别)可能会修改同一表或其他表中的一行或多行,并可能具有级联效应(触发其他操作/触发器),但所有这些都依赖于DBMS。

主要区别是触发器激活了多less次。 想象一下,你有一个1M行表,你运行:

UPDATE t SET columnX = columnX + 1 

语句级触发器将被激活一次 (即使没有行更新)。 行级触发器将被激活一百万次, 每次更新一行


另一个区别是命令或激活。 例如在Oracle中,将按以下顺序激活4种不同types的触发器:

 Before the triggering statement executes Before each row that the triggering statement affects After each row that the triggering statement affects After the triggering statement executes 

在前面的例子中,我们有这样的东西:

 Before statement-level trigger executes Before row-level trigger executes One row is updated After row-level trigger executes Before row-level trigger executes Second row is updated After row-level trigger executes ... Before row-level trigger executes Millionth row is updated After row-level trigger executes After statement-level trigger executes 

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

例如 :假设你有一个触发器,可以确保所有高中gradle生都gradle。 也就是说,当一个高年级的成绩是12,而我们增加到13时,我们希望把成绩设为NULL

对于语句级触发器,你可以说,在增加级语句运行之后,检查整个表一次,将任何等级为13的n行更新为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是可选的。

语句级别触发器的主要区别在于:

语句级别触发器:基于名称,如果任何语句被执行,它将起作用。 不依赖于多less行或任何行影响。它只执行一次。 Exp:如果你想更新部门HR的每个员工的薪水,最后你想知道有多less行受到影响意味着有多less薪水增加,然后使用语句级触发器。 请注意,即使零行被更新,触发器也会执行,因为如果执行了任何语句,就会调用语句级触发器。 不pipe它是否影响任何行或不。

行级触发器:每当行受到影响时执行。 如果零行受到影响,则不执行行级别的触发器。如果要从部门为HR的emp表中删除一个雇员,并且希望雇员从emp表中删除,HR部分的部门表中的计数应该减less那么你应该select行级触发。

语句级触发器只有一次用于dml语句行leval触发器是针对每一行的dml语句

如果你想要在执行语句时修改行数,那么可以通过语句级触发器来实现。viseversa …当你想要执行你的语句时,你需要对行数进行修改,然后你需要去行级触发..

例如:语句级别触发器适用于表格被修改时,那么更多数量的logging受到影响。 行级触发器适用于每行更新或修改