触发器(tigger)是一种由事物自动触发执行的特殊存储过程,这些事件可以是对一个表进行INSERT、UPDATE、DELETE等操作。

一、创建触发器

create   [ constraint ]   trigger name {  before |  after | instead of} { event [ or....] }  on table_name [from referenced_table_name]

{not deferrable | [deferrable] {intially immediate |  initially deferred }}

[for [each]  {row  |  statement}]

[when (condition)]

execute procedure function_name (arguments)

1  实例:删除学生表student的一条记录是,同事删掉score的成绩记录也删除。

1.1 创建表

postgres=# create table student(
student_no int primary key,
sutdent_name varchar(40),
age int);
CREATE TABLE postgres=# create table score(
postgres(# student_no int,
postgres(# chinese_score int,
postgres(# test_date date);
CREATE TABLE
postgres=#

  

1.2 创建执行函数

postgres=# create or replace function student_delete_trigger()
postgres-# returns trigger as $$
postgres$# begin
postgres$# delete from score where student_no = OLD.student_no;
postgres$# return OLD;
postgres$# end;
postgres$# $$
postgres-# language plpgsql;
CREATE FUNCTION

  

1.3 在创建触发器

postgres=# create trigger delete_student_trigger
postgres-# after delete on student
postgres-# for each row execute procedure student_delete_trigger();
CREATE TRIGGER
postgres=#

  

1.4 插入数据

postgres=# insert into score values(1,85,date '2018-05-16');
INSERT 0 1
postgres=# insert into score values(2,56,date '2018-05-16');
INSERT 0 1
postgres=# insert into score values(1,88,date '2018-05-16');
INSERT 0 1
postgres=# insert into score values(2,33,date '2018-05-16');
INSERT 0 1
postgres=# insert into score values(3,43,date '2018-05-16');
INSERT 0 1
postgres=# insert into score values(3,53,date '2018-05-16');
INSERT 0 1

  

1.5 删除学号为3的学生

postgres=# delete from student where student_no = 3;
DELETE 1
postgres=# select * from score;
student_no | chinese_score | test_date
------------+---------------+------------
1 | 85 | 2018-05-16
2 | 56 | 2018-05-16
1 | 88 | 2018-05-16
2 | 33 | 2018-05-16
(4 rows) postgres=#

  

未完待续。。。

postgresql逻辑结构--触发器(三)的更多相关文章

  1. postgresql逻辑结构(一)

    一.数据库逻辑结构介绍 数据库:应用连接到一个数据库时,一般不能访问其它数据库,除非使用dblink等其他手段. 表.索引:postgresql中标的术语为relation,其它数据库中成为table ...

  2. PostgreSQL 创建触发器 Trigger

    触发器的知识点: PostgreSQL在以下情况下执行/调用触发器:在尝试操作之前(在检查约束并尝试INSERT,UPDATE或DELETE之前).或者在操作完成后(在检查约束并且INSERT,UPD ...

  3. [转]PostgreSQL 逻辑结构 和 权限体系 介绍

    摘要: 本文旨在帮助用户理解PostgreSQL的逻辑结构和权限体系,帮助用户快速的理解和管理数据库的权限. 逻辑结构 最上层是实例,实例中允许创建多个数据库,每个数据库中可以创建多个schema,每 ...

  4. 触发器三(行级DML触发器)(学习笔记)

    行级DML触发器 每当一条记录出现更新操作时进行触发操作定义时要定义FOR EACH ROW 使用":old.字段"和":new.字段"标识符 No. 触发语句 ...

  5. 跟我一起读postgresql源码(三)——Rewrite(查询重写模块)

    上一篇博文我们阅读了postgresql中查询分析模块的源码.查询分析模块对前台送来的命令进行词法分析.语法分析和语义分析后获得对应的查询树(Query).在获得查询树之后,程序开始对查询树进行查询重 ...

  6. MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例

    主要实例:把临时表tmp_table数据插入到目标表target_table 一.MySql造数存储过程实例 mysql造数 -- 第一步,创建临时表 CREATE TEMPORARY TABLE I ...

  7. 触发器-- 肖敏_入门系列_数据库进阶 60、触发器(三) --youku

    二 https://v.youku.com/v_show/id_XMzkxOTc5NDY0OA==.html?spm=a2h0k.11417342.soresults.dtitle 三 https:/ ...

  8. postgresql 的触发器

    今天编写了一个触发器 功能: 有两个表,当一个表的字段有所改动的时候,另一个表跟着改动 CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS T ...

  9. postgresql 表触发器

    1.先建一个函数,用来执行触发器启动后要执行的脚本 CREATE OR REPLACE FUNCTION "public"."trigger_day_aqi"( ...

随机推荐

  1. centos网络配置(手动设置,自动获取)的2种方法3

    不知道为什么最近一段时间网络特别的慢,还老是断,断的时候,局域网都连不上,当我手动设置一下ip后就可以了,搞得我很无语.下面是2种设置网络连接的方法,在说怎么设置前,一定要做好备份工作,特别是对于新手 ...

  2. java如何编写下载功能

    @RequestMapping("/downLoadFailRecord") public ModelAndView downLoadFailRecord( HttpServlet ...

  3. Java的StringBuffer和StringBuilder类

    StringBuffer (字符串缓冲对象) 概念:用于表示可以修改的字符串,称为字符串缓冲对象 作用:使用运算符的字符串将自动创建字符串缓冲对象 例如: str1+str2的操作,实际上是把str1 ...

  4. java锁的种类以及辨析(转载)

    java锁的种类以及辨析(一):自旋锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) .这些已经写好提供的锁为我 ...

  5. Gitlab 赋予某台机器git clone的权限 Deploy key

    开发项目CI(持续化部署)的时候,需要赋予jeckins所在的机器从gitlab远程仓库克隆代码到本地的权限. 之前我们基本都是通过管理gitlab某个项目的成员的方式,管理gitlab的权限. 但是 ...

  6. MD5状态变量,为什么是A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476这几个变量

    找到过一篇答复: 3.3 Step 3. Initialize MD Buffer A four-word buffer (A,B,C,D) is used to compute the messag ...

  7. FWT学习笔记

    FWT学习笔记 引入 一般的多项式乘法是这样子的: \(c_i=\sum_{i,j}a_j*b_k*[j+k==i]\) 但是如果我们将这个乘法式子里面的+号变换一下变成其他的运算符号呢? \(c_i ...

  8. Code Chef April Cook-Off 2019题解

    传送门 \(PEWDSVTS\) 我哪根筋不对了要把所有可行的拿出来\(sort\)一下--还有忘开\(long\ long\)真的好难受-- int main(){ // freopen(" ...

  9. BZOJ 1016--[JSOI2008]最小生成树计数(kruskal&搜索)

    1016: [JSOI2008]最小生成树计数 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7429  Solved: 3098[Submit][St ...

  10. java之Collection框架

    Collection的一些框架类的关系图: 1 Collection简介 Collection的定义 public interface Collection<E> extends Iter ...