触发器(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. H5总结

    1.新增的语义化标签: <nav>: 导航 <header>: 页眉 <footer>: 页脚 <section>:区块 <article> ...

  2. linux ping命令

    Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...

  3. 《mysql必知必会》学习_第六章_20180730_欢

    第六章<过滤数据> P35 1. select prod_name,prod_price from products where prod_price=2.5; 2.select prod ...

  4. Ajax_Json

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxJson ...

  5. Vue的配置

    一.build:打包的配置文件的文件夹 1.build.js  生产版本的配置文件,一般这个文件我们是不改的 'use strict' //调用检查版本的文件,check-versions的导出直接是 ...

  6. 数字签名、数字证书的原理以及证书的获得java版

    数字签名原理简介(附数字证书) 首先要了解什么叫对称加密和非对称加密,消息摘要这些知识. 1. 非对称加密 在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密.同时,一般一个密钥加 ...

  7. unigui验证微信服务器的有效性

    UNIGUI验证微信服务器的有效性: //////////////////////////////////////////// //UniGUIServerModuleHTTPCommand //公众 ...

  8. 一些LinuxC的小知识点(一)

    以下代码在Federo9上试验成功. 一.格式化输入16进制字符串 printf(); 输入结果: 二.测试各类型的占用的字节数 int main(int argc, char *argv[]) { ...

  9. node.js fs,http

    error: EventEmitter定义了一个特殊的时间error,它包含了‘错误’的语义,当error被发射时,EventEmitter规定如果没有 响应的监听器,Node.js会把它当做异常,退 ...

  10. Linux下替代grep高效文本搜索工具

    1.ack yum install ack 2.ag git clone https://github.com/ggreer/the_silver_searcher.git yum install a ...