pg数据库创建触发器
1、什么是触发器
触发器是一种由事件自动触发执行的特殊存储过程,这些事件可以是对一个表进行 INSERT、UPDATE、DELETE 等操作。
触发器经常用于加强数据的完整性约束和业务规则上的约束等。
2、创建触发器
步骤:
先为触发器建一个执行函数,此函数的返回类型为触发器类型 trigger;
然后即可创建相应的触发器。
创建触发器的语法:
CREATE [ CONSTRAINT ] TRIGGER name
{ BEFORE | AFTER | INSTEAD OF } { event [ OR ... ]}
ON table_name
[ FROM referenced_table_name ]
{ NOT DEFERRABLE | [ DEFEREABLE ] { IINITIALLY IMMEDIATE | INITIALLY DEFERED} }
FOR [ EACH ] { ROW | STATEMENT }
[ WHEN { condition }]
EXECUTE PROCEDURE function_name ( arguments )
语法说明:
CREATE --创建触发器 后面为自定义的触发器名称
BEFORE | AFTER --可以选 BEFORE 或 AFTER ,指触发器在附着表操作的之前还是之后触发
INSERT OR DELETE --触发事件,可以在 INSERT | DELETE | UPDATE(OF column ...) 中单选或多选,多选只能用OR连 接,不能用ADD
ON table_name --哪张表改变时会触发触发器
ON DESIGNATED_POINT --附着表,或视图,触发器只能附着在一张表/视图上
FOR EACH ROW --FOR EACH ROW选项说明触发器为行触发器。还有可以有语句触发器,二者区别是触发次数以行 为单位还是语句为单位
3、示例
例如当删除学生表(student)中的一条记录时,把这个学生在成绩表 (score) 中的成绩记录也删除掉,这时就可以使用触发器。
先建触发器的执行函数:
CREATE OR REPLEASE FUNCTION student_delete_trigger_fun()
returns trigger as $$
begindelete from score where student_no = old.student_no;return old;
end;
$$
language plpgsql;
再创建这个触发器:
CREATE TRIGGER delete_student_trigger
after delete on student
for each row execute procedure student_delete_trigger_fun();
实现:当你删除这个学生的记录时,改学生关联在成绩表的数据也被删除。
4、语句级和行级触发器
PostgreSQL中的触发器可以分为:语句级触发器与行级触发器。
语句级触发器:
CREATE TRIGGER log_trigger AFTER INSERT OR DELETE OR UPDATE ON studentFOR STATEMENT EXECUTE PROCEDURE student_log_trigger();
语句级触发器执行每个SQL时,只执行一次 。
行级触发器:
CREATE TRIGGER log_trigger AFTER INSERT OR DELETE OR UPDATE ON studentFOR EACH ROW EXECUTE PROCEDURE student_log_trigger();
行级触发器每行都会执行一次。
而当SQL语句没有更新实际的行时,语句触发器也会被触发,而行级触发器不会被触发。
5、其他相关
禁用或启用触发器,可用以下命令:ALTER TRIGGER trigger_name DISABLE/ENABLE;
禁用某个表上的所有触发器,可用如下命令:ALTER TABLE table_name DISABLE ALL TRIGGERS.
pg数据库创建触发器相关推荐
- Oracle数据库 创建触发器和序列
一.触发器+序列 简介: 在操作数据库的时候,需要在插入数据时,需要序号自增,这时我们可以先写一个序列,然后创建触发器,在数据插入时,调用触发器,让序列自增. 假设没有序列,假设数据是录入的, 这个录 ...
- Pg sql 创建自动增长列及修改序列当前值
Pg 数据库创建自动增长列需要使用sql创建序列,然后再将序列绑定到对应的字段上. 创建序列的sql语句为 CREATE SEQUENCE REDIS_NODE_ID_SEQSTART WITH 1 ...
- mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除
[数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...
- Oracle入门(十四.22)之创建DDL和数据库事件触发器
一.什么是DDL和数据库事件触发器? DDL语句触发DDL触发器:CREATE,ALTER或DROP. 数据库事件触发器由数据库中的非SQL事件触发,例如: •用户连接到数据库或与数据库断开连接. • ...
- 创建触发器,将数据库中表的修改记录进日志表
要求: 假定有一个数据库,有10张表,每张表都有inputuser和createtime,modifyuser,modifytime 4个字段用来记录数据库记录的变动 请为该数据库建立一个日志表,可以 ...
- mysql建立修改表存储过程_MySQL数据库创建、表的创建、存储过程、触发器
一.基本内容 (1) 使用SQL语句创建数据库: (2) 为数据库分配管理权限: (3) 定义表和数据库的完整性,student(学生表),course(课程表)和 sc(学生选课表), 并设置各个表 ...
- oracle建个触发器,oracle数据库如何创建触发器实例
Oracle DBA Studio 工具里面就能创建触发器 CREATE TRIGGER 名称 CREATE TRIGGER - 创建一个新触发器 语法 CREATE TRIGGER name { B ...
- oracle创建dml触发器,Oracle数据库创建DML触发器
触发器的基本分类 1.行触发器:数据库表中的每一行有变化都会触发一次触发器代码 2.语句触发器:与语句所影响的行数无关,仅触发一次 3.BEFORE触发器:在DML语句执行之前触发 4.ALFTER触 ...
- oracle中创建触发器
从csdn上面看到一个如何创建触发器的问题,感觉自己很有必要保存学习,特写下来: 条件: 现有A.B两张表 A: 工号 姓名 密码 性别 年龄 ... B: 工号 姓名 密码 当对A表中的" ...
- 详解MariaDB数据库的触发器
1.什么是触发器 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行 它比数据库本身标准的功能有更精细和更复杂的数据控制能力 2.触发器的作用: 2.1 安全性 可以基于数据库的 ...
最新文章
- 成幻Online Judge 1.00 Beta 正式发布 2007.6.22
- 【风控建模】风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
- 你们要的动图来了:2张动图快速理解高内聚与低耦合
- buuctf (misc)神秘龙卷风 [brainfuck密码,压缩包密码爆破]
- CVPR 2022 接收结果出炉!录用 2067 篇,接收数量上升24%(附最新论文下载)
- Markdown编译器插入公式的数学符号及字体颜色、背景
- Github(5)-开源开发-常见错误
- latex 基本用法(五)
- Paypal 在线支付接口应用从零开始,第1节,[建立沙盒测试环境]
- 【虚拟机】VirtualBox 安装 Windows 11 虚拟机简介
- R语言-基于集波士顿住房
- 固态硬盘能不能提高计算机速度,固态硬盘掉速如何解决?用这几招轻松提升PC速度...
- idea快速创建serilizableuid
- gerrit常见错误与处理
- twitter注册不了_如何阻止Twitter重点阻止不相关的通知
- 玫瑰花绘制python_Python玫瑰花绘制-Go语言中文社区
- 弹性布局(骰子六个面制作)
- java 进销存 crm websocket即时聊天发图片文字 好友群组 SSM源码
- Java核心技术第一周学习总结
- Springboot错误页面和错误信息定制
热门文章
- 全网最快的网络服务器是什么,最好用最快的首选 DNS 服务器地址设置 (电信/联通/移动)...
- Error-Input tensor has type kTfLiteFloat32: it requires specifying NormalizationOptions metadata to
- windows7计算机不显示光驱,win7系统检测不到光驱的解决方法
- EditPlus文本编辑器,中文与破解实战
- Altium Designer软件插件之封装神器Altium Library Loader
- js vue 截取分割字符串数据
- js 将字符串分割为数组
- css文字上浮div,css文字样式与div
- Linux 下查看局域网内所有主机IP和MAC
- 【Java】 IDEA使用教程