KingbaseES触发器介绍
触发器及其作用
触发器(trigger)是用户定义的由事件驱动的特殊过程。一旦定义,所有用户的对应操作均会由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。
触发器类似于约束,但是比约束更加灵活,也可以实施比外键约束、检查约束更为复杂的检查和操作,具有更精细和更强大的数据处理能力。触发器分类
KingbaseES的触发器根据依赖触发对象的不同分为两种表级触发器和事件触发器:
a. 表级触发器:依赖于已存在的表,对特定表的相关操作会引动发触发器调用相应的触发器函数。
b. 事件触发器:依赖于特定的事件。事件触发器对数据库来说是全局的,并且可以捕捉DDL事件。查看触发器
select * from information_schema.triggers创建触发器
语法
CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
ON table_name
[ FROM referenced_table_name ]
[ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ]
[ REFERENCING { { OLD | NEW } TABLE [ AS ] transition_relation_name } [ ... ] ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( condition ) ]
EXECUTE { FUNCTION | PROCEDURE } function_name ( arguments )
CREATE TRIGGER创建一个新触发器。该触发器将被关联到指定的表、视图或者外部表并且在表上发生特定操作时将执行指定的函数function_name。
为了创建一个触发器,必须首先创建一个返回类型为trigger 或event_trigger 的触发器函数。
触发器函数
当一个函数被声明为一个没有参数且返回值类型为trigger(作用于表级触发器)或者 event_trigger(作用于事件触发器)的函数时,这个函数就是一个触发器函数。
触发器函数只能通过触发器调用,而不能直接调用。例子 记录emp表操作信息
CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*;
END IF;
RETURN NULL;
END;
$emp_audit$ LANGUAGE plsql;
CREATE TRIGGER emp_audit
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW EXECUTE FUNCTION process_emp_audit();
触发器函数中的特殊变量
NEW | :NEW 数据类型为RECORD;该变量为行级触发器中的INSERT /UPDATE 操作保持新数据行。在语句级别的触发器以及DELETE 操作,这个变量是null。
OLD | :OLD 数据类型为“RECORD“;该变量为行级触发器中的UPDATE/DELETE 操作保持新数据行。在语句级别的触发器以及INSERT 操作,这个变量是null。
TG_NAME 数据类型为NAME;实际触发的触发器名。
TG_WHEN 数据类型为TEXT;触发器触发的时机,包括BEFORE、AFTER 或INSTEAD OF,具体取决于触发器的定义。
TG_LEVEL 数据类型为TEXT;触发器的级别,为ROW 或“STATEMENT“,具体取决于触发器的定义。
TG_OP 数据类型为TEXT;触发触发器的操作,包括“INSERT“、UPDATE、DELETE 或TRUNCATE。
TG_RELID 数据类型为OID;触发触发器的对象的OID。
TG_RELNAME 数据类型为NAME;触发触发器的表(视图)的名称,这个变量可能在未来的版本中被取消,所以现在应尽量使用TG_TABLE_NAME 来替代它。
TG_TABLE_NAME 数据类型为NAME;触发触发器的表(视图)的名称。
TG_TABLE_SCHEMA 数据类型为NAME;触发触发器的表(视图)所在的模式名。
TG_NARGS 数据类型为INTEGER;在CREATE TRIGGER 语句中传递给触发器函数的参数数量。
TG_ARGV[] 数据类型为TEXT 数组;CREATE TRIGGER 语句中传递给触发器函数的参数。下标从0 开始。非法下标(小于0 或者大于等于TG_NARGS)会返回一个空值。删除触发器
DROP TRIGGER [ IF EXISTS ] NAME ON TABLE [ CASCADE | RESTRICT ];
删除触发器时,触发器的函数不会被删除。不过,当表删除时,表上的触发器也会被删除,可以使用 DROP FUNCTION fun_name 直接删除触发器函数。
KingbaseES触发器介绍的更多相关文章
- mysql 内置功能 触发器介绍
使用触发器可以在用户对表进行[增.删.改]操作时前后定义一些操作,注意:没有查询 创建触发器 create trigger 触发器的名字 之前(before)或者之后(after) 行为(inser ...
- SQL SERVER 触发器介绍
什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:upda ...
- plsql 触发器介绍 语句级别触发器、行级别触发器。
/* 分类: 1.DDL触发器 执行create,alter,drop操作时,会激活的触发器 2.DML触发器 执行增.删除.修改时,激活的触发器 3.系统事件触发器 执行特定的系统事件时(启动.加载 ...
- mysql 触发器介绍
create trigger triggerName after/before insert/update/delete on tableName for each row --这句话在my ...
- SQL Server DDL触发器运用
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...
- SqlServer基础之(触发器)
概念: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...
- 今天说一下DML触发器的顺序
因为05之后的版本允许了一个对象有多个after触发器,所以呢~顺序方面还是要留意一下下的.比如我现在要往一个测试表里面添加多个触发器. USE Test GO ,),Name )) GO CREAT ...
- Oracle 触发器在日志管理开发中的应用
摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...
- (转)SqlServer基础之(触发器)(清晰易懂)
阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念: 触发器(trigger)是SQL server 提供给程序员和数据分析 ...
随机推荐
- String-StringBuffer-StringBuilder,Comparable-comparator
String 1.String是final类,不可被继承 2.内部是value[]的数组 private final char value[]; 3.不可变字符串 String s1 = " ...
- ShardingSphere-proxy-5.0.0企业级分库分表、读写分离、负载均衡、雪花算法、取模算法整合(八)
一.简要说明 以下配置实现了: 1.分库分表 2.每一个分库的读写分离 3.读库负载均衡算法 4.雪花算法,生成唯一id 5.字段取模 二.配置项 # # Licensed to the Apache ...
- 使用C#编程语言开发Windows Service服务
转载-https://www.cnblogs.com/yubao/p/8443455.html Create Windows Service project using Visual Studio C ...
- NC14326 Rails
NC14326 Rails 题目 题目描述 There is a famous railway station in PopPush City. Country there is incredibly ...
- CF141E Clearing Up 题解
思路分析 自认为是一道很好的思维题. 直接看上去的想法是: 跑一个生成树,每一次加的边颜色交替进行,直到拉出生成树. 仔细想想,发现可能无法保证最后是一棵树而不是森林,也是说输出都是 \(-1\) . ...
- 静态同步方法和解决线程安全问题_Lock锁
静态的同步方法锁对象是谁?不能是thisthis是创建对象之后产生的,静态方法优先于对象静态方法的锁对象是本类的cLass属性-->class文件对象(反射) 卖票案例出现了线程安全问题 卖出了 ...
- 网络通信协议分类和IP地址
网络通信协议分类 通信的协议还是比较复杂的,java.net 包中包含的类和接口,它们提供低层次的通信细节.我们可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节 java.net ...
- logback-spring 集成 ELK、kafka的配置
pom.xml <dependency> <groupId>com.github.danielwegener</groupId> <artifactId> ...
- 【Unity学习笔记】掌握MoneBehavior中的重要属性、方法
一.重要属性 1-1.获取自己依附的GameObject using System.Collections; using System.Collections.Generic; using Unity ...
- vue发布自定义组件到npm
一.使用 vue create currentdatetime创建项目(可查考https://cli.vuejs.org/zh/guide/creating-a-project.html),创建成功后 ...