【PostgreSQL-9.6.3】触发器概述(普通触发器)
一个触发器声明了当执行一种特定类型的操作时数据库应该自动执行一个特殊的函数。触发器可以被附加到表、视图和外部表。触发器经常用于做完整性约束,或者某种业务规则的约束。
1. 触发器的创建语法如下:
CREATE [CONSTRAINT] 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 )
2. 触发器的创建步骤如下:
先为触发器创建一个执行函数,返回类型为触发器类型,然后创建相应的触发器。
3. 触发器的分类如下:
(1)语句级触发器:一条SQL语句,触发器只执行一次,即使是修改了零行数据的SQL,也会导致相应的触发器执行。
(2)行级触发器:每行发生变化,就会执行一次触发器。
(3)BEFORE触发器:在触发事件之前执行触发器。
(4)AFTER触发器:在触发事件之后执行触发器。
4. 触发器中的一些特殊变量如下:
(1)NEW
数据类型是RECORD;该变量为行级触发器中的INSERT/UPDATE操作保持新数据行。在语句级别的触发器以及DELETE操作,这个变量未被赋值。
(2)OLD
数据类型是RECORD;该变量为行级触发器中的UPDATE/DELETE操作保持新数据行。在语句级别的触发器以及INSERT操作,这个变量未被赋值。
(3)TG_NAME
数据类型是name;该变量包含实际触发的触发器名。
(4)TG_WHEN
数据类型是text;是值为BEFORE、AFTER或INSTEAD OF的一个字符串,取决于触发器的定义。
(5)TG_LEVEL
数据类型是text;是值为ROW或STATEMENT的一个字符串,取决于触发器的定义。
(6)TG_OP
数据类型是text;是值为INSERT、UPDATE、DELETE或TRUNCATE的一个字符串,它说明触发器是为哪个操作引发。
(7)TG_RELID
数据类型是oid;是导致触发器调用的表的对象 ID。
(8)TG_RELNAME
数据类型是name;是导致触发器调用的表的名称。现在已经被废弃,并且可能在未来的一个发行中消失。使用TG_TABLE_NAME替代。
(9)TG_TABLE_NAME
数据类型是name;是导致触发器调用的表的名称。
(10)TG_TABLE_SCHEMA
数据类型是name;是导致触发器调用的表所在的模式名。
(11)TG_NARGS
数据类型是integer;在CREATE TRIGGER语句中给触发器过程的参数数量。
(12)TG_ARGV[]
数据类型是text数组;来自CREATE TRIGGER语句的参数。索引从 0 开始记数。非法索引(小于 0 或者大于等于tg_nargs)会导致返回一个空值。
The End!
2017-08-17
【PostgreSQL-9.6.3】触发器概述(普通触发器)相关推荐
- 《数字电子技术基础》5.1 触发器 概述
前言 <数字电子技术基础>第5.1节学习笔记 <数字逻辑电路设计>第4.1节学习笔记 5.1 触发器 概述 数字电路分为组合逻辑电路和时序逻辑电路. 组合逻辑电路由门电路组成, ...
- MS SQL入门基础:触发器概述
在上面几节我们介绍了一般意义的存储过程,即用户自定义的存储过程和系统存储过程.本节将介绍一种特殊的存储过程,即触发器.在余下各节中我们将对触发器的概念.作用以及对其的使用方法作详尽介绍,使读者了解如何 ...
- oracle触发器 条件,oracle触发器的定义和使用
触发器定义:当特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用也不能传递参数. 触发器功能: 1. 允许/限制对表的修改 2. 自动生成派生列,比如自增字段 3. 强制数据一 ...
- 用D触发器构造边沿触发器
文章目录 1 用D触发器构造边沿触发器 1 用D触发器构造边沿触发器 首先来回顾一下D触发器: 为了确保数据的可靠,我们需要构造边沿触发器,改进后的电路结构如下: 电路分析如下: 通过上图我们可以看到 ...
- Oracle 原理:DML触发器和数据库触发器
一.DML触发器 触发器的作用即当某个事件发生时会自动执行执行程序段里的内容. 触发器可以作用于表或者视图,可以指定在insert 或update 或delete 操作前.操作时.操作后 执行特定的 ...
- oracle 创建触发器_oracle创建触发器
创建触发器 创建触发器的一般语法是: CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPD ...
- android sqlite触发器,SQLite---使用触发器(Trigger)
背景 当数据库中的数据太多时,往往需要进行清理,将一些过时的数据删除,但是往往找不到合适的时机进行清理.于是SQLite提供了Trigger,当某些事件发生时,可以触发并且进行处理. Trigger ...
- sql server update触发器_SQL Server 触发器
T-SQL 触发器 触发器分为 BEFORE触发器*(SQL Server不支持,Oracle支持)在事件发生时触发. AFTER触发器是 SQLServer生成的最初用于自动相应数据修改的机制.在 ...
- Oracle触发器和MySQL触发器之间的区别
原文链接:http://blog.csdn.net/a19881029/article/details/37820363 --------------------------------------- ...
最新文章
- HTML5新特性总结
- 解微分方程_matlab
- LeetCode 06Z字形变换07整数反转
- HTML 转 PDF 之 wkhtmltopdf
- LeetCode Algorithm 274. H 指数
- 基于css3的鼠标滑动按钮动画之CSS--续
- (pytorch-深度学习系列)pytorch实现多层感知机(自动定义模型)对Fashion-MNIST数据集进行分类-学习笔记
- 创建线程有几种不同的方式
- python找不到指定文件夹_python找不到指定文件
- 李彦宏开年内部信:2018营收破千亿,做出好产品的百度已归来
- cs4.1 编译与安装
- C语言 小游戏 电脑大概率获胜,用C语言实现简单的三子棋小游戏
- 浏览器UserAgent发展历史
- Unity游戏开发案例分享
- 分享美容护肤门店预约下单小程序开发制作功能介绍
- 硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
- 人人网冷落主业,押注智能硬件
- C/C++每日一问--判断素数
- RFID之M1卡数据分析
- Unity引擎光照烘焙
热门文章
- java的super_Java中的Super()
- 基于Matlab----RSSI测距定位技术性能仿真
- 装饰器python的通俗理解_Python装饰器的通俗理解
- 平台的本质——保险公司互联网平台建设系列
- Web页面自动化执行,Java+Selenium3.0-Mac OS环境搭建
- BZOJ1259:[CQOI2007]矩形rect(DFS)
- 42.从非托管磁盘创建虚拟机
- SharpMap在web上的应用
- 手机号码验证的正则表达式(17......)
- 深度解析两大应用内测分发工具Pre.im与TestFlight