一个触发器声明了当执行一种特定类型的操作时数据库应该自动执行一个特殊的函数。触发器可以被附加到表、视图和外部表。触发器经常用于做完整性约束,或者某种业务规则的约束。

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;是值为BEFOREAFTERINSTEAD OF的一个字符串,取决于触发器的定义。

(5)TG_LEVEL

数据类型是text;是值为ROWSTATEMENT的一个字符串,取决于触发器的定义。

(6)TG_OP

数据类型是text;是值为INSERTUPDATEDELETETRUNCATE的一个字符串,它说明触发器是为哪个操作引发。

(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】触发器概述(普通触发器)的更多相关文章

  1. ORACLE触发器概述之【语句触发器】【weber出品】

    一.触发器概述 与表,视图,模式,或者数据库相关的PL/SQL过程,当触发条件被触发时,自动执行 分类: 1.语句触发器 2.行触发器 二.语句触发器 1. 什么是语句触发器 语句触发器,是指当执行D ...

  2. SQL语句(二十一)—— 触发器(DML触发器)

    触发器 一 .触发器概述(特殊的存储过程) 定义: 在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用. 作用: ...

  3. SR触发器和JK触发器

    SR触发器(电平触发器) 基本RS触发器的逻辑方程为:Q(n+1)=一S+RQ(n); 约束方程:R+S=1; 根据上述两个式子得到它的四种输入与输出的关系: 1.当R端有效(0),S端无效时(1), ...

  4. 触发器(基本的SR触发器、同步触发器、D触发器)

    一.能够存储1位二值信号的基本单元电路统称为触发器(Filp-Flop) 触发器是构成时序逻辑电路的基本逻辑部件.它有两个稳定状态:“0”和“1”.在不同的输入情况下,它可以被置0状态或1状态,当输入 ...

  5. mysql 查看触发器,删除触发器

    1. 查看所有触发器 2. 根据触发器名称看下相关触发器信息 3.  查看所有触发器 另一种查询触发器命令:    show triggers; 删除触发器命令: drop trigger trigg ...

  6. ORACLE触发器概述之【行触发器】【weber出品】

    1. 行触发器的定义 行触发器是指执行DML操作时,每作用一行就触发一次的触发器.审计数据变化时,可以使用行触发器 2. 建立行触发器的语法如下: create or replace trigger ...

  7. 触发器二(DML触发器)(学习笔记)

    DML触发器(语句触发器) 由DML语句进行触发,当用户执行了INSERT,UPDATE,DELETE操作时就会触发操作 示例一.只有在每个月的10日才允许办理,新员工入职与离职,其他时间不允许增加和 ...

  8. 【触发器】MySQL触发器使用详解

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器在MySQL中,创建触发器语法如下: ...

  9. PostgreSQL的HA解决方案-项目概述

    公司使用的数据库时postgresql,一直运行都很流畅,但是最近java新做的管理平台,由于登录用户较多,并发性比较大.另外新系统可能优化也存在问题,所以pg经常崩溃,所以我就开始研究如何事项pg的 ...

随机推荐

  1. noip模拟赛 蒜头君的树

    分析:这道题问的是树上整体的答案,当然要从整体上去考虑. 一条边对答案的贡献是这条边一端连接的点的个数*另一端连接的点的个数*边权,可以用一次dfs来统计答案,之后每次更改操作在原答案的基础上增减就好 ...

  2. C语言编程规范试题

    C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...

  3. java 反射和暴力反射 两个DEMO

    </pre><pre code_snippet_id="402084" snippet_file_name="blog_20140622_5_93502 ...

  4. java梳理-反射

    本文属于面试题梳理系列:问题:java反射类的訪问私有方法与普通方法相比,须要多处理什么?  之前梳理类载入的时候,介绍到初始化的时机之中的一个:用java.lang.reflect包的方法对类进行反 ...

  5. [LeetCode][Java] Trapping Rain Water

    题意: Given n non-negative integers representing an elevation map where the width of each bar is 1, co ...

  6. node.js中的require

    初初接触node.js,印象最深刻的就是开头密密麻麻的require了. 这是什么东西? 其实也没啥大惊小怪的.require就是为了引用别的js文件,利于模块化编程,重用.以及避免过多代码挤在同一个 ...

  7. BNU 13024 . Fi Binary Number 数位dp/fibonacci数列

    B. Fi Binary Number     A Fi-binary number is a number that contains only 0 and 1. It does not conta ...

  8. js 四种调用方式 Method Invocation Pattern

    4.3. Invocation Invoking a function suspends the execution of the current function, passing control ...

  9. oc67--NSString1

    // // main.m // NSString基本概念 // Foundation框架,苹果有80多个框架,Foundation有125个头文件. #import <Foundation/Fo ...

  10. oc66--代理模式应用2

    // // BabyProtocol.h #import <Foundation/Foundation.h> @class Baby; @protocol BabyProtocol < ...