当前位置:网站首页>GBase 8c触发器(三)
GBase 8c触发器(三)
2022-07-03 02:18:00 【大壮十二】
一个触发器定义也能指定一个布尔的WHEN条件,它将被测试来看该触发器是否应该被触发。在行级触发器中,WHEN条件可以检查该行的旧列值和/或新列值(语句级触发器也能有WHEN条件,但是该特性对它们不太有用)。在一个BEFORE触发器中,WHEN条件只是在该函数被或者将被执行前计算,因此使用WHEN条件与在该触发器函数的开始测试相同的条件没有本质区别。不过,在一个AFTER触发器中,WHEN条件只是在行更新发生之后被计算,并且它决定在语句的末尾一个事件是否被排队来触发该触发器。因此当一个AFTER触发器的WHEN不返回真时,在语句的末尾没有必要将一个事件进行排队,也没有必要重新取出该行。如果触发器只对少数行触发,这可以使得修改很多行的语句明显加快。INSTEAD OF触发器不支持WHEN条件。
通常,行级BEFORE被用来检查或修改即将被插入或更新的数据。例如,一个BEFORE触发器可以被用来把当前时间插入到一个timestamp列中,或者检查该行的两个元素之间是否一致。行级AFTER触发器大多数被用来将更新传播到其他表,或者针对其他表进行一致性检查。进行这种工作分工的原因是,一个AFTER触发器可以肯定它看到的是该行的最终值,而一个BEFORE触发器则不能,因为还可能有其他BEFORE触发器在它之后触发。如果你不知道让一个触发器是BEFORE或AFTER,则BEFORE形式更加有效,因为关于该操作的信息直到语句的末尾都不需要被保存。
如果一个触发器函数执行 SQL 命令,则这些命令可能会再次引发触发器。这就是所谓的级联触发器。对于级联的层数没有直接的限制。级联有可能会导致对同一个触发器的递归调用。例如,一个INSERT触发器可能执行一个向同一个表插入一个额外行的命令,这就导致该INSERT触发器被再次引发。所以在这种情形下,触发器程序员应该负责避免无限递归。
在定义一个触发器时,可以为它指定参数。在触发器定义中包括参数的目的是允许具有相似需求的不同触发器调用同一个函数。例如,可能有一个一般性的触发器函数,它需要两个列名作为参数,一个放当前用户而另一个放当前时间戳。在正确编写的情况下,这个触发器函数应该独立于它所触发的表。因此同一个函数可以被用于具有适当列的任意表上的INSERT事件,这样做的用途之一是可以自动追踪一个交易表中记录的创建。如果被定义成一个UPDATE触发器,它也可以被用来追踪最新的更新事件。
每一种支持触发器的编程语言都有自己的方法来让触发器输入数据对触发器函数可用。这种输入数据包括触发器事件的类型(如INSERT或UPDATE)以及被列在CREATE TRIGGER中的任何参数。对于一个行级触发器,输入数据还包括用于INSERT和UPDATE触发器的NEW行,和/或用于UPDATE和DELETE触发器的OLD行。
默认的,语句级触发器没有任何方法检查被语句修改的单个行。 但是AFTER STATEMENT触发器可以请求创建转换表以使受影响的行集可用于触发器。AFTER ROW触发器也可以请求转换表, 以便他们可以看到表中的全部更改以及它们当前正在触发的单个行中的更改。 再次检查转换表的方法取决于正在使用的编程语言,但典型方法是
边栏推荐
- 【CodeForces】CF1338A - Powered Addition【二进制】
- 浏览器是如何对页面进行渲染的呢?
- 去除网页滚动条方法以及内外边距
- File class (add / delete)
- DQL basic operation
- In 2022, 95% of the three most common misunderstandings in software testing were recruited. Are you that 5%?
- Socket编程
- Unrecognized SSL message, plaintext connection?
- Current situation and future of Web3 in various countries
- Summary of ES6 filter() array filtering methods
猜你喜欢

easyExcel

Restcloud ETL cross database data aggregation operation

使用Go语言实现try{}catch{}finally

In 2022, 95% of the three most common misunderstandings in software testing were recruited. Are you that 5%?
![[shutter] pull the navigation bar sideways (drawer component | pageview component)](/img/6f/dfc9dae5f890125d0cebdb2a0f4638.gif)
[shutter] pull the navigation bar sideways (drawer component | pageview component)
![[fluent] fluent debugging (debug debugging window | viewing mobile phone log information | setting normal breakpoints | setting expression breakpoints)](/img/ac/bf83f319ea787c5abd7ac3fabc9ede.jpg)
[fluent] fluent debugging (debug debugging window | viewing mobile phone log information | setting normal breakpoints | setting expression breakpoints)

返回一个树形结构数据

Servlet中数据传到JSP页面使用el表达式${}无法显示问题

stm32F407-------ADC
![[shutter] bottom navigation bar implementation (bottomnavigationbar bottom navigation bar | bottomnavigationbaritem navigation bar entry | pageview)](/img/41/2413af283e8f1db5d20ea845527175.gif)
[shutter] bottom navigation bar implementation (bottomnavigationbar bottom navigation bar | bottomnavigationbaritem navigation bar entry | pageview)
随机推荐
stm32F407-------DMA
y54.第三章 Kubernetes从入门到精通 -- ingress(二七)
机器学习笔记(持续更新中。。。)
The sandbox explains its vision for the meta universe platform
Machine learning notes (constantly updating...)
缺少库while loading shared libraries: libisl.so.15: cannot open shared object file: No such file
Word word word
Method of removing webpage scroll bar and inner and outer margins
[shutter] pull the navigation bar sideways (drawer component | pageview component)
The data in servlet is transferred to JSP page, and the problem cannot be displayed using El expression ${}
苏世民:25条工作和生活原则
COM and cn
Restcloud ETL cross database data aggregation operation
詳細些介紹如何通過MQTT協議和華為雲物聯網進行通信
Unrecognized SSL message, plaintext connection?
CFdiv2-Fixed Point Guessing-(区间答案二分)
CFdiv2-Fixed Point Guessing-(區間答案二分)
Swift开发学习
可视化yolov5格式数据集(labelme json文件)
4. 类和对象