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 提供给程序员和数据分析 ...
随机推荐
- python素描照片
#!/usr/bin/python # -*- coding: utf-8 -*- from PIL import Image import numpy as np a = np.asarray(Im ...
- 避坑手册 | JAVA编码中容易踩坑的十大陷阱
JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患.此外,这些陷阱也是面试的时候面试官比较喜欢问的问题. 本文对这些陷阱进行了统一的整理,让你知道应该如何避免 ...
- NC19115 选择颜色
NC19115 选择颜色 题目 题目描述 \(n\) 个人排成一个环形,每个人要从 \(c\) 种颜色中选择一个. 牛牛希望相邻的人选择的颜色是不同的 问有多少种方案. 输出方案数对 \(10007\ ...
- NC25136 [USACO 2006 Ope B]Cows on a Leash
NC25136 [USACO 2006 Ope B]Cows on a Leash 题目 题目描述 给定如图所示的若干个长条.你可以在某一行的任意两个数之间作一条竖线,从而把这个长条切开,并可能切开其 ...
- 017(Power Strings二刷)(KMP)
题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1466 题目思路:不知道大家在KMP算法里有没有看见这么个句子 while(j<len) 这 ...
- 一文聊透 Netty 核心引擎 Reactor 的运转架构
本系列Netty源码解析文章基于 4.1.56.Final版本 本文笔者来为大家介绍下Netty的核心引擎Reactor的运转架构,希望通过本文的介绍能够让大家对Reactor是如何驱动着整个Nett ...
- Css3入门详解
一.Css基本语法 1.Html和Css没分开时 点击查看代码 <!DOCTYPE html> <html lang="en"> <head> ...
- 01. MySQL__数据库分类和介绍
数据库的分类 1. 关系型数据库 以表为数据库存储数据的单位,关系型数据库是经过数学理论验证可以保存现实生活中任何关系型的数据 2. 非关系型数据库 主要应用在一些特定场景,解决某些具体问题比如解决高 ...
- 了解有哪几个C标准&了解C编译管道
下列哪个不是C标准.参考:C语言标准 小知识:C语言标准的发展 K&R C: 1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·科尔尼干(Brian Kernighan)出版了 ...
- ElementUI嵌套页面及关联增删查改实现
@ 目录 前言 一.ElementUI如何在原有页面添加另外一个页面并实现关联增删查改? 二.实现步骤 1.ElementUI代码 2.思路:很简单 1.1 首先通过el-row.el-col.el- ...