sql – 行级触发器vs语句级触发器

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

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

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

谢谢!

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

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

UPDATE t
SET columnX = columnX + 1

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

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

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
http://stackoverflow.com/questions/10167346/row-level-trigger-vs-statement-level-trigger

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql – 行级触发器vs语句级触发器