1. 程式人生 > 其它 >資料庫實驗五--OpenGauss(完整性控制)

資料庫實驗五--OpenGauss(完整性控制)

目錄

實驗要求

  1. 練習建立下面約束:
      主鍵(PRIMARY KEY)約束;
      唯一性(UNIQUE)約束;
      將STUDENTS表中的SNAME列設為唯一鍵約束、COURSES表中的CNAME列設為唯一鍵約束;
      檢查(CHECK)約束等;
    外來鍵(FOREIGN KEY)約束:外來鍵約束是為了強制實現表之間的參照完整性。級聯參照完整性約束就是為了保證外來鍵資料的關聯性。
  2. 建立觸發器
     觸發器是一種特殊型別的儲存過程,通常用於實現強制業務規則和資料完整性。建立UPDATE觸發器檢查修改操作的業務規則,如:在STUDENTS表上建立觸發器,當用戶修改學生的學號時給出提示資訊。

實驗內容一:建立約束

CREATE TABLE <表名>
(<列名><資料型別> DEFAULT <預設值>] [列級約束定義],
<列名><資料型別> DEFAULT <預設值>] [列級約束定義],
...,
[<表級約束定義>, ,<表級約束定義>]);

我們在使用create建立表的時候(如上),就可以為該表新增列級約束和表級約束。


當然,我們也可以在建立表之後通過ALTER來更改約束性
舉例:

ALTER TABLE departments
ADD FOREIGN KEY (Dheadno) REFERENCES Teachers(Tno);


唯一鍵約束:

ALTER TABLE students 
ADD UNIQUE(sname);


ALTER TABLE courses
ADD UNIQUE(cname);

實驗內容二:觸發器

CREATE TRIGGER <觸發器名> <觸發時間> <觸發事件> ON <表名> 
[REFERENCING <舊/新值別名>, …, <舊/新值別名>] 
[FOR EACH {ROW | STATEMENT}]
[WHEN (<觸發條件>)]
 <被觸發的SQL語句>

<被觸發的SQL語句>是觸發動作體,具有如下形式:

BEGIN ATOMIC
<可執行的SQL語句>;
...
END

在STUDENTS表上建立觸發器,當用戶修改學生的學號時給出提示資訊:

先建立函式

CREATE OR REPLACE FUNCTION updatestudents() RETURNS TRIGGER AS
$$ 
DECLARE
BEGIN
RAISE NOTICE 'sno is changed';
RETURN NEW;
END;
$$ LANGUAGE PLPGSQL;

再建立觸發器

CREATE TRIGGER updatesno
AFTER UPDATE OF sno ON students
FOR EACH ROW
EXECUTE PROCEDURE updatestudents();

我們測試一下: