oracle触发器 菜鸟教程,PostgreSQL 触发器
PostgreSQL 触发器
PostgreSQL 触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。
下面是关于 PostgreSQL 触发器几个比较重要的点:
PostgreSQL 触发器可以在下面几种情况下触发:
在执行操作之前(在检查约束并尝试插入、更新或删除之前)。
在执行操作之后(在检查约束并插入、更新或删除完成之后)。
更新操作(在对一个视图进行插入、更新、删除时)。
触发器的 FOR EACH ROW 属性是可选的,如果选中,当操作修改时每行调用一次;相反,选中 FOR EACH STATEMENT,不管修改了多少行,每个语句标记的触发器执行一次。
WHEN 子句和触发器操作在引用 NEW.column-name 和 OLD.column-name 表单插入、删除或更新时可以访问每一行元素。其中 column-name 是与触发器关联的表中的列的名称。
如果存在 WHEN 子句,PostgreSQL 语句只会执行 WHEN 子句成立的那一行,如果没有 WHEN 子句,PostgreSQL 语句会在每一行执行。
BEFORE 或 AFTER 关键字决定何时执行触发器动作,决定是在关联行的插入、修改或删除之前或者之后执行触发器动作。
要修改的表必须存在于同一数据库中,作为触发器被附加的表或视图,且必须只使用 tablename,而不是 database.tablename。
当创建约束触发器时会指定约束选项。这与常规触发器相同,只是可以使用这种约束来调整触发器触发的时间。当约束触发器实现的约束被违反时,它将抛出异常。
语法
创建触发器时的基础语法如下:
CREATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name
ON table_name
[
-- 触发器逻辑....
];
在这里,event_name 可以是在所提到的表 table_name 上的 INSERT、DELETE 和 UPDATE 数据库操作。您可以在表名后选择指定 FOR EACH ROW。
以下是在 UPDATE 操作上在表的一个或多个指定列上创建触发器的语法:
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name
ON table_name
[
-- 触发器逻辑....
];
实例
让我们假设一个情况,我们要为被插入到新创建的 COMPANY 表(如果已经存在,则删除重新创建)中的每一个记录保持审计试验:
runoobdb=# CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
为了保持审计试验,我们将创建一个名为 AUDIT 的新表。每当 COMPANY 表中有一个新的记录项时,日志消息将被插入其中:
runoobdb=# CREATE TABLE AUDIT(
EMP_ID INT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
在这里,ID 是 AUDIT 记录的 ID,EMP_ID 是来自 COMPANY 表的 ID,DATE 将保持 COMPANY 中记录被创建时的时间戳。所以,现在让我们在 COMPANY 表上创建一个触发器,如下所示:
runoobdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
auditlogfunc() 是 PostgreSQL 一个程序,其定义如下:
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$
BEGIN
INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp);
RETURN NEW;
END;
$example_table$ LANGUAGE plpgsql;
现在,我们开始往 COMPANY 表中插入数据:
runoobdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );
这时,COMPANY 表中插入了一条记录:
同时, AUDIT 表中也插入了一条记录,因为我们在插入 COMPANY 表时创建了一个触发器。相似的,我们也可以根据需求在更新和删除时创建触发器:
emp_id | entry_date
--------+-------------------------------
1 | 2013-05-05 15:49:59.968+05:30
(1 row)
列出触发器
你可以把从 pg_trigger 表中把当前数据库所有触发器列举出来:
runoobdb=# SELECT * FROM pg_trigger;
如果,你想列举出特定表的触发器,语法如下:
runoobdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';
得到结果如下:
tgname
-----------------
example_trigger
(1 row)
删除触发器
删除触发器基础语法如下:
drop trigger ${trigger_name} on ${table_of_trigger_dependent};
删除本文上表 company 上的触发器 example_trigger 的指令为:
drop trigger example_trigger on company;
oracle触发器 菜鸟教程,PostgreSQL 触发器相关推荐
- PostgreSQL触发器的使用
原文: https://www.yiibai.com/postgresql/postgresql-trigger.html -------------------------------------- ...
- oracle触发器高级教程
[转自]http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm#i2153503 CREA ...
- 触发器使用教程和命名规范
触发器使用教程和命名规范 目 录 触发器使用教程和命名规范 1 1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6,例三 ...
- ORACLE查出表所有的触发器及触发器详细信息
ORACLE查出表所有的触发器及触发器详细信息 一.查all_triggers表得到trigger_name Sql代码 select trigger_name from all_triggers w ...
- oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解
本文实例讲述了oracle 存储过程.函数和触发器用法.分享给大家供大家参考,具体如下: 一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 创建存储过程 用CR ...
- postgreSQL触发器
一.概述 1.什么是触发器 触发器的功能就是为了解决这类问题而设计的,当你更新或查询某个资料表时会触动触发器,触发器就会照您所设计的流程,同步去插入.更新.删除其他资料,你不再需要重复下达多次的SQL ...
- Oracle/Kingbase中用序列和触发器实现ID自增
在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为主键的功能,这时Oracle可以通过"序列"和"触发器"来实现ID自动增加的 ...
- 【Oracle】常用对象之触发器
一.什么是触发器? 触发器trigger,是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用,有行级触发器和语句级触发器之分. 行级触发器:触发的表中的每一条数据改变时就会 ...
- Oracle数据库基础教程
查看书籍详细信息: Oracle数据库基础教程 编辑推荐 体现作者多年的数据库管理与开发经验,结合大量实用技巧,重点突出,便于灵活掌握,提供典型应用实例与上机实验,分析详细,实用性强. 本书是作者结合 ...
- mysql触发器实验小结_mysql 触发器小结
触发器可以监视某种数据操作(insert/update/delete) 并触发(insert/update/delete)( 创建触发器4要素 监视地点 -----监视事件----触发时间----触发 ...
最新文章
- vss2005与vs2005绑定问题解决
- CF1070L Odd Federalization 高斯消元
- ubantu 16.04 mysql_Ubuntu 16.04下安装MySQL
- dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成
- WEB打印控件Lodop技术手册
- 周记20180309
- 分类器集成和非均衡分类
- 模拟信号的调制与解调
- panda3d python教程_图解 Panda3D引擎开发入门
- WEB2.0下的金蛋 什么样的商业模式会成功?
- 解决:steps/make_fbank.sh: line 132: run.pl: command not found
- 翻斗式雨量计的组成与工作原理
- js实现查找两个相同字符串之间的最长子字符串长度
- Windows server 2012 服务器挂载NAS盘
- mysql 除法和四舍五入
- 这样做老板,企业才发展!
- Unity ILRuntime Debugger使用及常见问题
- Linux下使用yay搜索软件出错
- vuejs视图不能及时更新的问题 ,深入响应式原理
- 基准价搭档“货比三家” 8thManage轻松节省采购成本
热门文章
- C语言课程设计–成绩管理系统
- python无限锁屏_定时锁屏程序,Python祝你原理猝死!
- sql prompt linux,SQL PROMPT的设置
- three.js视频教程2022最新
- python集合和字典创建通讯录_Python基础-字典和集合
- VC与VS的对应关系
- wps 打开xml格式乱码_“WPS不兼容EXCEL打开后出现乱码怎么解决“xlsx文件打开是乱码怎么办...
- xlsx文件打开乱码_我的 EXCEL 工作表打开出现乱码?(xlsx文件打开是乱码怎么办)...
- 01-hadoop学习环境准备
- K2P 潘多拉固件PandoraBox