gpt4 book ai didi

SQL:语句触发器 VS 每行

转载 作者:行者123 更新时间:2023-12-04 12:35:56 24 4
gpt4 key购买 nike

编辑:我不知道它是什么发行版,它在试卷中。

遗憾的是,我只是没有得到这个。我对行级触发器很满意,但有人可以向我解释如果触发器是语句级的,结果会有什么不同吗?

关系/语句触发器/行级触发器

Employee(ID VARCHAR2(30), Salary NUMBER)


Create Trigger AutoRaise
After insert on Employee
Referencing new table as NT
update Employee
Set salary = salary + (select avg(salary) from NT)


Create trigger AutoRaise
After insert on Employee
Referencing new table as NT
For each Row
Update employee
Set salary = salary + (select avg(salary) from NT)

我知道在 for each row 触发器中,它将为受触发语句影响的每一行触发。现在语句级别触发器会以不同的方式修改结果吗?假设我在一个语句中插入五个元组,它会为它们设置工资等吗?如果是这样,行级触发器在这里有什么好处?

我试过搜索,但我就是无法理解它。

谢谢,

编辑:现在,我只是很密集,但会触发产生不同的输出吗?对于语句级触发器,如果​​我使用示例值:

在触发器创建之前的表中:
(A,50)

创建触发器后在 ONE 语句中添加:
(B,70), (C,30)

第一个触发器肯定会为每个插入的元组设置薪水吗?所以第一个会变成 120(因为平均值是 50, 70 + 50 = 120),第二个会变成 80。如果这是真的,那么第二个触发器的结果有何不同?

最佳答案

不同的是,在语句级触发器的情况下SELECT avg(salary) FROM NT将返回插入行的平均工资,但在行级别的情况下,avg(salary)总是等于 salary新记录(为每一行单独执行的触发器)。此外,如果没有记录受到影响,将执行语句级触发器。在行级触发器的情况下,当 0 条记录受到影响时,大多数 RDMS 不会触发它。

边注。我相信问题中的触发机构仅作为示例;否则,我建议不要在触发器中使用递归,即使特定的 RDMS 有这样的选项。

关于SQL:语句触发器 VS 每行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com