MogDB/opengauss 触发器简介(1)

触发器是对应用动作的响应机制,当应用对一个对象发起 DML 操作时,就会产生一个触发事件(Event)。如果该对象上拥有该事件对应的触发器,那么就会检查触发器的触发条件(Condition)是否满足,如果满足触发条件,那么就会执行触发动作(Action)。

事件:触发器的触发事件,当对一个对象执行 UPDATE/DELETE/INSERT 等操作的时候,会激活触发器检查触发条件。

条件:触发条件可以是一个表达式或者是一个 SQL 查询语句,当触发条件的执行结果是 FALSE、NULL 或者空集的时候,代表触发条件不满足,触发器不会被触发。

动作:触发动作和存储过程相似,它的执行结合了触发器本身的特点,比如可以直接使用触发条件中的执行结果,或者是执行事件修改的元组中的值。

通过 CREATE TRIGGER 命令可以创建一个触发器,在 CREATE TRIGGER 命令中可以指定触发器的事件、条件和动作。

创建触发器具体语句如下:

CREATE [ CONSTRAINT ] TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF } { event [ OR '...'] }

ON table_name

[ FROM referenced_table_name ]

{ NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } }

[ FOR [ EACH ] { ROW | STATEMENT } ]

[ WHEN ( condition ) ]

EXECUTE PROCEDURE function_name ( arguments );

触发事件满足时,还需要考虑触发器的执行时机,触发器语法中提供了两个触发时机:BEFORE 和 AFTER。顾名思义,BEFORE 就是在触发器事件执行之前检查触 发条件以及执行触发动作,而 AFTER 则是在触发事件之后检查触发条件以及执行触发动作。

在 UPDATE 事件发生之前执行触发器,具体语句如下:

CREATE TRIGGER before_update

BEFORE UPDATE

ON ...

在 INSERT 事件发生之后执行触发器,具体语句如下:

CREATE TRIGGER after_insert

AFTER INSERT

ON ...

触发器可以对应到元组(一个 SQL 语句可以更新多个元组),也可以对应到 SQL 语句级,默认是 SQL 语句级。

针对 SQL 语句级的触发器,具体语句如下:

CREATE TRIGGER after_insert

AFTER INSERT

ON warehouse

FOR EACH STATEMENT

...

针对元组级的触发器,具体语句如下:

CREATE TRIGGER after_insert

AFTER INSERT

ON warehouse

FOR EACH ROW

...

MogDB/opengauss触发器简介(1)的更多相关文章

  1. Mogdb / opengauss 用户密码错误,用户被锁

    # 问题概述xxx客户新上一套opengauss数据库,在测试中程序里用户的密码配置错误,导致用户被锁# 解决方案1.跟oracle 语法一样alter user xxx account unlock ...

  2. PL/SQL 触发器简介

    与公司同事交流了一下,得知触发器很少用.性能是一方面,主要是如果用太多触发器,可能到时你都不知道会有什么操作自动发生. 有些操作可以在程序中控制.例如在插入某个表时,写个log表的记录.这可以用触发器 ...

  3. SQLServer之触发器简介

    触发器定义 触发器是数据库服务器中发生事件时自动执行的一种特殊存储过程.SQLServer允许为任何特定语句创建多个触发器.它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对数据库进行操作 ...

  4. MySql触发器简介

    MySQL 数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,只要一个预定义的事件发生就会被 My ...

  5. oracle 触发器学习

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

  6. Oracle触发器实例(网搜)

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

  7. 二十九、oracle 触发器

    一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...

  8. oracle触发器 调用 web接口

    最近要求开发当数据表发生变化的时候调用web接口的需求,上网找了好几篇文章看着都觉得不是很好,也根据别人的思路去实现了下,感觉都不太理想,最后使用URLConnection实现了调用.具体查看一下代码 ...

  9. mssql instead of 触发器应用一-创建只读视图(view)的方法

    转自: http://www.maomao365.com/?p=4906 <span style="color:white;background-color:blue;font-wei ...

  10. DML_DDL_触发器

    Oracle触发器1-介绍Oracle官方参考:PL/SQL Language Referenc->9 PL/SQL TriggerReasons to Use Trigger:■ Automa ...

随机推荐

  1. 【Azure 应用服务】VS2019发布应用到正在运行的App Service时失败问题的解决

    问题描述 在VS 2019中配置号App Service的Publish Profile后,发布应用出现错误.根据VS 2019中的输出消息可知有文件正在运行中,无法被替换,所以发布失败. 问题解决 ...

  2. 一文了解 NebulaGraph 上的 Spark 项目

    本文首发于 Nebula Graph Community 公众号 最近我试着搭建了方便大家一键试玩的 Nebula Graph 中的 Spark 相关的项目,今天就把它们整理成文分享给大家.而且,我趟 ...

  3. Python实现ARP攻击

    目录 概述 ARP协议 IP转MAC 结构 ARP扫描 开始欺骗 中间人 其他 ARP老化 防御 windows linux 概述 高中的时候,学校有一个商店,会放开WIFI给偷偷带手机去学校的我们使 ...

  4. [逆向] PE文件学习

    目录 概述 MS-DOS 头部 IMAGE_DOS_HEADER PE头 IMAGE_NT_HEADER IMAGE_FILE_HEADER IMAGE_OPTIONAL_HEADER32 数据目录列 ...

  5. 使用OpenFeign远程调用时请求头处理报错问题

    1. 错误信息 basic.result.exception.OtherException: feign error:系统异常:Content type 'multipart/form-data;bo ...

  6. Python列表转换成字典、嵌套列表转字典、多个列表转为字典嵌套列表

    目录 两列表转为字典 多列表转为字典嵌套列表 嵌套列表转字典 方法一:直接内置dict 方法二: for循环 一个列表转字典 两列表转为字典 list1=["key1"," ...

  7. Java基础全程复习笔记(值得参考)

    Java基础复习笔记 第01章:Java语言概述 1. Java基础学习的章节划分 第1阶段:Java基本语法 Java语言概述.Java的变量与进制.运算符.流程控制语句(条件判断.循环结构).br ...

  8. react 修改页面title - react-document-title

    安装 cnpm install --save react-document-title 引用 import DocumentTitle from 'react-document-title' 代码 & ...

  9. 【深度学习基础】基于Numpy的循环神经网络实现和反向传播训练

    本文是<深度学习进阶:自然语言处理>.<神经网络与深度学习>和<动手学深度学习>的读书笔记.本文将介绍基于Numpy的循环神经网络的前向传播和反向传播实现,包括RN ...

  10. rancher添加用户报错x509: certificate has expired Internal error occurred: failed calling webhook "rancherauth.cattle.io":

    错误信息: Internal error occurred: failed calling webhook "rancherauth.cattle.io": Post https: ...