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=#

  

未完待續。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM