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数据库创建触发器相关推荐

  1. Oracle数据库 创建触发器和序列

    一.触发器+序列 简介: 在操作数据库的时候,需要在插入数据时,需要序号自增,这时我们可以先写一个序列,然后创建触发器,在数据插入时,调用触发器,让序列自增. 假设没有序列,假设数据是录入的, 这个录 ...

  2. Pg sql 创建自动增长列及修改序列当前值

    Pg 数据库创建自动增长列需要使用sql创建序列,然后再将序列绑定到对应的字段上. 创建序列的sql语句为 CREATE SEQUENCE REDIS_NODE_ID_SEQSTART WITH 1 ...

  3. mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除

    [数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...

  4. Oracle入门(十四.22)之创建DDL和数据库事件触发器

    一.什么是DDL和数据库事件触发器? DDL语句触发DDL触发器:CREATE,ALTER或DROP. 数据库事件触发器由数据库中的非SQL事件触发,例如: •用户连接到数据库或与数据库断开连接. • ...

  5. 创建触发器,将数据库中表的修改记录进日志表

    要求: 假定有一个数据库,有10张表,每张表都有inputuser和createtime,modifyuser,modifytime 4个字段用来记录数据库记录的变动 请为该数据库建立一个日志表,可以 ...

  6. mysql建立修改表存储过程_MySQL数据库创建、表的创建、存储过程、触发器

    一.基本内容 (1) 使用SQL语句创建数据库: (2) 为数据库分配管理权限: (3) 定义表和数据库的完整性,student(学生表),course(课程表)和 sc(学生选课表), 并设置各个表 ...

  7. oracle建个触发器,oracle数据库如何创建触发器实例

    Oracle DBA Studio 工具里面就能创建触发器 CREATE TRIGGER 名称 CREATE TRIGGER - 创建一个新触发器 语法 CREATE TRIGGER name { B ...

  8. oracle创建dml触发器,Oracle数据库创建DML触发器

    触发器的基本分类 1.行触发器:数据库表中的每一行有变化都会触发一次触发器代码 2.语句触发器:与语句所影响的行数无关,仅触发一次 3.BEFORE触发器:在DML语句执行之前触发 4.ALFTER触 ...

  9. oracle中创建触发器

    从csdn上面看到一个如何创建触发器的问题,感觉自己很有必要保存学习,特写下来: 条件: 现有A.B两张表 A: 工号 姓名 密码 性别 年龄 ... B: 工号 姓名 密码 当对A表中的" ...

  10. 详解MariaDB数据库的触发器

    1.什么是触发器 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行 它比数据库本身标准的功能有更精细和更复杂的数据控制能力 2.触发器的作用: 2.1 安全性 可以基于数据库的 ...

最新文章

  1. 成幻Online Judge 1.00 Beta 正式发布 2007.6.22
  2. 【风控建模】风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
  3. 你们要的动图来了:2张动图快速理解高内聚与低耦合
  4. buuctf (misc)神秘龙卷风 [brainfuck密码,压缩包密码爆破]
  5. CVPR 2022 接收结果出炉!录用 2067 篇,接收数量上升24%(附最新论文下载)
  6. Markdown编译器插入公式的数学符号及字体颜色、背景
  7. Github(5)-开源开发-常见错误
  8. latex 基本用法(五)
  9. Paypal 在线支付接口应用从零开始,第1节,[建立沙盒测试环境]
  10. 【虚拟机】VirtualBox 安装 Windows 11 虚拟机简介
  11. R语言-基于集波士顿住房
  12. 固态硬盘能不能提高计算机速度,固态硬盘掉速如何解决?用这几招轻松提升PC速度...
  13. idea快速创建serilizableuid
  14. gerrit常见错误与处理
  15. twitter注册不了_如何阻止Twitter重点阻止不相关的通知
  16. 玫瑰花绘制python_Python玫瑰花绘制-Go语言中文社区
  17. 弹性布局(骰子六个面制作)
  18. java 进销存 crm websocket即时聊天发图片文字 好友群组 SSM源码
  19. Java核心技术第一周学习总结
  20. Springboot错误页面和错误信息定制

热门文章

  1. 全网最快的网络服务器是什么,最好用最快的首选 DNS 服务器地址设置 (电信/联通/移动)...
  2. Error-Input tensor has type kTfLiteFloat32: it requires specifying NormalizationOptions metadata to
  3. windows7计算机不显示光驱,win7系统检测不到光驱的解决方法
  4. EditPlus文本编辑器,中文与破解实战
  5. Altium Designer软件插件之封装神器Altium Library Loader
  6. js vue 截取分割字符串数据
  7. js 将字符串分割为数组
  8. css文字上浮div,css文字样式与div
  9. Linux 下查看局域网内所有主机IP和MAC
  10. 【Java】 IDEA使用教程