暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库-表级触发器

原创 zy 2022-12-08
2311

表级触发器都是基于表中数据的触发器,它通过针对相应表对象的插入/删除/修改等DML语句触发。

触发动作

激发表级触发器的触发动作是三种数据操作命令,即INSERT、DELETE和UPDATE操作。在触发器定义语句中用关键字INSERT、DELETE和UPDATE指明构成一个触发器事件的数据操作的类型,其中UPDATE触发器会依赖于所修改的列,在定义中可通过UPDATE OF <触发列清单>的形式来指定所修改的列,<触发列清单>指定的字段数不能超过128个。

触发级别

根据触发器的级别可分为元组级(也称行级)和语句级。

元组级触发器,对触发命令所影响的每一条记录都激发一次。假如一个DELETE命令从表中删除了1000行记录,那么这个表上的元组级DELETE触发器将被执行1000次。元组级触发器常用于数据审计、完整性检查等应用中。元组级触发器是在触发器定义语句中通过FOR EACH ROW子句创建的。对于元组级触发器,可以用一个WHEN子句来限制针对当前记录是否执行该触发器。WHEN子句包含一条布尔表达式,当它的值为TRUE时,执行触发器;否则,跳过该触发器。

语句级触发器,对每个触发命令执行一次。例如,对于一条将500行记录插入表TABLE_1中的INSERT语句,这个表上的语句级INSERT触发器只执行一次。语句级触发器一般用于对表上执行的操作类型引入附加的安全措施。语句级触发器是在触发器定义语句中通过FOR EACH STATEMENT子句创建的,该子句可缺省。

触发时机
触发时机通过两种方式指定。一是通过指定BEFORE或AFTER关键字,选择在触发动作之前或之后运行触发器;二是通过指定INSTEAD OF关键字,选择在动作触发的时候,替换原始操作,INSTEAD OF允许建立在视图上,并且只支持行级触发。

在元组级触发器中可以引用当前修改的记录在修改前后的值,修改前的值称为旧值,修改后的值称为新值。对于插入操作不存在旧值,而对于删除操作则不存在新值。

对于新、旧值的访问请求常常决定一个触发器是BEFORE类型还是AFTER类型。如果需要通过触发器对插入的行设置列值,那么为了能设置新值,需要使用一个BEFORE触发器,因为在AFTER触发器中不允许用户设置已插入的值。在审计应用中则经常使用AFTER触发器,因为元组修改成功后才有必要运行触发器,而成功地完成修改意味着成功地通过了该表的引用完整性约束。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论