MogDB/opengauss触发器简介(1)
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)的更多相关文章
- Mogdb / opengauss 用户密码错误,用户被锁
# 问题概述xxx客户新上一套opengauss数据库,在测试中程序里用户的密码配置错误,导致用户被锁# 解决方案1.跟oracle 语法一样alter user xxx account unlock ...
- PL/SQL 触发器简介
与公司同事交流了一下,得知触发器很少用.性能是一方面,主要是如果用太多触发器,可能到时你都不知道会有什么操作自动发生. 有些操作可以在程序中控制.例如在插入某个表时,写个log表的记录.这可以用触发器 ...
- SQLServer之触发器简介
触发器定义 触发器是数据库服务器中发生事件时自动执行的一种特殊存储过程.SQLServer允许为任何特定语句创建多个触发器.它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对数据库进行操作 ...
- MySql触发器简介
MySQL 数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,只要一个预定义的事件发生就会被 My ...
- oracle 触发器学习
触发器使用教程和命名规范 目 录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...
- Oracle触发器实例(网搜)
触发器使用教程和命名规范 目 录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...
- 二十九、oracle 触发器
一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...
- oracle触发器 调用 web接口
最近要求开发当数据表发生变化的时候调用web接口的需求,上网找了好几篇文章看着都觉得不是很好,也根据别人的思路去实现了下,感觉都不太理想,最后使用URLConnection实现了调用.具体查看一下代码 ...
- mssql instead of 触发器应用一-创建只读视图(view)的方法
转自: http://www.maomao365.com/?p=4906 <span style="color:white;background-color:blue;font-wei ...
- DML_DDL_触发器
Oracle触发器1-介绍Oracle官方参考:PL/SQL Language Referenc->9 PL/SQL TriggerReasons to Use Trigger:■ Automa ...
随机推荐
- 【Azure 环境】中国区Azure是否可以根据资源组的模板,生成一个可视化的架构图呢?
问题描述 这是一个国际版链接(https://docs.microsoft.com/en-us/answers/questions/370410/how-to-generate-architectur ...
- Kotlin扩展函数与属性原理解析
一.扩展函数 扩展函数可以方便地给现有类增加属性和方法而不改动类地代码. 二.原理 fun String.addTo(s: String): String{ return this + s } 反编译 ...
- SpringCloud Nacos
1.Nacos简介 SpringCloud Alibaba 由来: 因为原先Spring Cloud 的许多组件都是对Netflix 公司的各种框架进行封装, 然后因为Netflix公司对后续更新的各 ...
- C++ //提高编程 模板(泛型编程 STL) //模板不可以直接使用 它只是一个框架 //模板的通用并不是万能的 //语法 //template<typename T> //函数模板两种方式 //1.自动类型推导 必须推导出一致的数据类型T,才可以使用 //2.显示指定类型 模板必须确定出T的数据类型,才可以使用
1 //C++提高编程 模板(泛型编程 STL) 2 //模板不可以直接使用 它只是一个框架 3 //模板的通用并不是万能的 4 //语法 5 //template<typename T> ...
- kafka的消费
1.消费方式 consumer 采用 pull(拉) 模式从 broker 中读取数据. push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的. 它的目标是尽可能 ...
- Acwing第132场周赛
AcWing 5366. 大小写转换 签到题,可以用stl里面的tolower函数 #include <bits/stdc++.h> #define ls p<<1 #defi ...
- 使用svgo-loader只对部分文件生效
svgo-loader配合svg-sprite-loader使用,网上教程很多,不赘述 const svgRule = config.module.rule("svg-sprite" ...
- 孔夫子旧书网书籍信息得爬取并保存为json,csv,excel多种文件格式
python版本:3.7 需要得引入得包: from selenium import webdriver from selenium.common.exceptions import TimeoutE ...
- iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案
iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案 iview table 滚动条位置重置 https://www.jianshu.com/p/32fcd50489ff
- Template String Converter - 字符串中加变量 自动将单引号变换 - vscode插件
Template String Converter - 字符串中加变量 自动将单引号变换 - vscode插件