zoukankan      html  css  js  c++  java
  • postgresql逻辑结构--触发器(三)

    触发器(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=#
    

      

    未完待续。。。

  • 相关阅读:
    SQL over关键字(转载)
    XSLT学习(转载)
    js动态添加options(转载)
    ASP.NET中如何防范SQL注入式攻击(转载)
    Wordpress SEO robots
    RegistryKey类的学习(转载)
    C# Lambda Expressions 简介(转载)
    ‍ps技巧184条(转载)
    2010年年终总结
    JavaScript(文件对象/锚点对象/链接对象)(转载)
  • 原文地址:https://www.cnblogs.com/sunshine-long/p/9051867.html
Copyright © 2011-2022 走看看