当前位置:网站首页>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触发器也可以请求转换表, 以便他们可以看到表中的全部更改以及它们当前正在触发的单个行中的更改。 再次检查转换表的方法取决于正在使用的编程语言,但典型方法是
边栏推荐
- Unrecognized SSL message, plaintext connection?
- Detailed introduction to the deployment and usage of the Nacos registry
- 单词单词单词
- require. context
- Stm32f407 ------- IIC communication protocol
- require.context
- DQL basic operation
- In 2022, 95% of the three most common misunderstandings in software testing were recruited. Are you that 5%?
- elastic stack
- Bottleneck period must see: how can testers who have worked for 3-5 years avoid detours and break through smoothly
猜你喜欢
RestCloud ETL 跨库数据聚合运算
[shutter] pull the navigation bar sideways (drawer component | pageview component)
Distributed transaction solution
The use of Flink CDC mongodb and the implementation of Flink SQL parsing complex nested JSON data in monggo
[shutter] shutter debugging (debugging control related functions | breakpoint management | code operation control)
使用Go语言实现try{}catch{}finally
Wechat applet Development Tool Post net:: Err Proxy Connexion Problèmes d'agent défectueux
elastic stack
[shutter] bottom navigation bar implementation (bottomnavigationbar bottom navigation bar | bottomnavigationbaritem navigation bar entry | pageview)
[Flutter] dart: class;abstract class;factory;类、抽象类、工厂构造函数
随机推荐
awk从入门到入土(2)认识awk内置变量和变量的使用
Leetcode 183 Customers who never order (2022.07.02)
Detailed analysis of micro service component sentinel (hystrix)
4. 类和对象
Stm32f407 ------- IIC communication protocol
Awk from getting started to being buried (2) understand the built-in variables and the use of variables in awk
微信小程序开发工具 POST net::ERR_PROXY_CONNECTION_FAILED 代理问题
COM and cn
SPI机制
机器学习流程与方法
Button button adaptive size of wechat applet
Word word word
机器学习笔记(持续更新中。。。)
《上市风云》荐书——唯勇气最可贵
Groovy, "try with resources" construction alternative
Prohibited package name
How to find summer technical internship in junior year? Are you looking for a large company or a small company for technical internship?
Trial setup and use of idea GoLand development tool
苏世民:25条工作和生活原则
Detailed introduction to the usage of Nacos configuration center