資料庫實驗五--OpenGauss(完整性控制)
阿新 • • 發佈:2022-04-21
目錄
實驗要求
- 練習建立下面約束:
主鍵(PRIMARY KEY)約束;
唯一性(UNIQUE)約束;
將STUDENTS表中的SNAME列設為唯一鍵約束、COURSES表中的CNAME列設為唯一鍵約束;
檢查(CHECK)約束等;
外來鍵(FOREIGN KEY)約束:外來鍵約束是為了強制實現表之間的參照完整性。級聯參照完整性約束就是為了保證外來鍵資料的關聯性。 - 建立觸發器
觸發器是一種特殊型別的儲存過程,通常用於實現強制業務規則和資料完整性。建立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();
我們測試一下: