• 触发器及其作用

    触发器(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触发器介绍的更多相关文章

  1. mysql 内置功能 触发器介绍

    使用触发器可以在用户对表进行[增.删.改]操作时前后定义一些操作,注意:没有查询 创建触发器 create trigger 触发器的名字 之前(before)或者之后(after)  行为(inser ...

  2. SQL SERVER 触发器介绍

    什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:upda ...

  3. plsql 触发器介绍 语句级别触发器、行级别触发器。

    /* 分类: 1.DDL触发器 执行create,alter,drop操作时,会激活的触发器 2.DML触发器 执行增.删除.修改时,激活的触发器 3.系统事件触发器 执行特定的系统事件时(启动.加载 ...

  4. mysql 触发器介绍

    create trigger triggerName   after/before insert/update/delete on tableName  for each row   --这句话在my ...

  5. SQL Server DDL触发器运用

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...

  6. SqlServer基础之(触发器)

    概念:   触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...

  7. 今天说一下DML触发器的顺序

    因为05之后的版本允许了一个对象有多个after触发器,所以呢~顺序方面还是要留意一下下的.比如我现在要往一个测试表里面添加多个触发器. USE Test GO ,),Name )) GO CREAT ...

  8. Oracle 触发器在日志管理开发中的应用

    摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...

  9. (转)SqlServer基础之(触发器)(清晰易懂)

    阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念:   触发器(trigger)是SQL server 提供给程序员和数据分析 ...

随机推荐

  1. Node.js精进(4)——事件触发器

    Events 是 Node.js 中最重要的核心模块之一,很多模块都是依赖其创建的,例如上一节分析的流,文件.网络等模块. 比较知名的 Express.KOA 等框架在其内部也使用了 Events 模 ...

  2. SAP Office Excel Intergration

    *&---------------------------------------------------------------------* *& Report DEMOEXCEL ...

  3. 基于JavaFX图形界面演示的迷宫创建与路径寻找

    事情的起因是收到了一位网友的请求,他的java课设需要设计实现迷宫相关的程序--如标题概括. 我这边不方便透露相关信息,就只把任务要求写出来. 演示视频指路: 视频过审后就更新链接 完整代码链接: 网 ...

  4. UiPath文本操作Get Text的介绍和使用

    一.Get Text操作的介绍 从指定的UI元素提取文本值 二.Get Text在UiPath中的使用 1. 打开设计器,在设计库中新建一个Sequence,为序列命名及设置Sequence存放的路径 ...

  5. nginx 出现An error occurred错误

    原因是我nginx中conf文件的配置里面 location中的 这一块内容是 #注释的那两行 所以报错出现这个错误. 后来将这两行注释掉,改成这两个就好了. root html; index ind ...

  6. idea部署项目运行没问题,但是页面404。

    解决方案: 这个位置不要添加内容. 参考:https://blog.csdn.net/hupixiong/article/details/105443606

  7. 没有Kubernetes怎么玩Dapr?

    Dapr 被设计成一个面向开发者的企业级微服务编程平台,它独立于具体的技术平台,可以运行在"任何地方".Dapr本身并不提供"基础设施(infrastructure)&q ...

  8. Vue3 项目实战

    使用Vue3 开发一个小米商城 业务流程 登录---> 产品首页--->产品站--->产品详情 购物车--->订单确认--->订单支付--->订单列表 业务开发流程 ...

  9. CSDN 原力(声望,影响力) -- 设计草案

    目标 CSDN 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...

  10. Azure Devops(十五) 使用Azure的私有Maven仓库

    上一篇文章中,我们介绍了如何使用Azure的nuget仓库,今天我们来研究一下如何使用azure给我们提供的maven仓库. 首先,我们打开azureDevops,点击到制品界面,然后选择maven. ...