資料庫第五章資料庫完整性

liuxiaohiu12發表於2018-11-05

一 資料庫的完整性:

資料的正確性 :是指資料是符合現實世界語義,反映了當前實際狀況的

資料的相容性: 是指資料庫同一物件在不同關係表中的資料是符合邏輯的

二:資料的完整性和安全性是兩個不同概念:

資料的完整性: 防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料

防範物件:不合語義的、不正確的資料 資料的安全性 保護資料庫 防止惡意的破壞和非法的存取

防範物件:非法使用者和非法操

二:實體完整性定義

關係模型的實體完整性

CREATE  TABLE中用PRIMARY KEY定義

單屬性構成的碼有兩種說明方法 定義為列級約束條件

定義為表級約束條件

對多個屬性構成的碼只有一種說明方法 定義為表級約束條件

三:實體完整性檢查和違約處理

插入或對主碼列進行更新操作時,關聯式資料庫管理系統按照實體完整性規則自動進行檢查。包括:

檢查主碼值是否唯一,如果不唯一則拒絕插入或修改 檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改

參照完整性定義:

在CREATE  TABLE中用FOREIGN KEY短語定義哪些列為外碼

用REFERENCES短語指明這些外碼參照哪些表的主碼

四:參照完整性檢查和違約處理

一個參照完整性將兩個表中的相應元組聯絡起來

對被參照表和參照表進行增刪改操作時有可能破壞參照完整性,必須進行檢查

五:參照完整性檢查和違約處理

參照完整性違約處理

(1) 拒絕(NO ACTION)執行 不允許該操作執行。該策略一般設定為預設策略

(2) 級聯(CASCADE)操作 當刪除或修改被參照表(Student)的一個元組造成了與參照表(SC)的不一致,則刪除或修改參照表中的所有造成不一致的元組

(3)設定為空值(SET-NULL) 當刪除或修改被參照表的一個元組時造成了不一致,則將參照表中的所有造成不一致的元組的對應屬性設定為空值。

對於參照完整性,除了應該定義外碼,還應定義外碼列是否允許空值

參見愛課程網資料庫系統概論5.2節動畫《參照完整性》

六:使用者定義的完整性

使用者定義的完整性是:針對某一具體應用的資料必須滿足的語義要求 關聯式資料庫管理系統提供了定義和檢驗使用者定義完整性的機制,不必由應用程式承擔

七:屬性上約束條件的定義

CREATE TABLE時定義屬性上的約束條件 列值非空(NOT NULL)

列值唯一(UNIQUE)

檢查列值是否滿足一個條件表示式(CHECK)

(1)不允許取空值

(2)列值唯一

(3)用CHECK短語指定列值應該滿足的條件

     屬性上的約束條件檢查和違約處理

插入元組或修改屬性的值時,關聯式資料庫管理系統檢查屬性上的約束條件是否被滿足

如果不滿足則操作被拒絕執行

八:元組上約束條件的定義

在CREATE TABLE時可以用CHECK短語定義元組上的約束條件,即元組級的限制

同屬性值限制相比,元組級的限制可以設定不同屬性之間的取值的相互約束條件 

九:元組上約束條件檢查和違約處理

插入元組或修改屬性的值時,關聯式資料庫管理系統檢查元組上的約束條件是否被滿足

如果不滿足則操作被拒絕執行

十:完整性約束命名子句

CONSTRAINT <完整性約束條件名><完整性約束條件>

<完整性約束條件>包括NOT NULL、UNIQUE、PRIMARY KEY短語、FOREIGN KEY短語、CHECK短語等

十一:觸發器

觸發器(Trigger)是使用者定義在關係表上的一類由事件驅動的特殊過程

 觸發器儲存在資料庫伺服器中

任何使用者對錶的增、刪、改操作均由伺服器自動啟用相應的觸發器

觸發器可以實施更為複雜的檢查和操作,具有更精細和更強大的資料控制能力

定義觸發器的語法說明

(1)表的擁有者才可以在表上建立觸發器

(2)觸發器名 觸發器名可以包含模式名,也可以不包含模式名 同一模式下,觸發器名必須是唯一的 觸發器名和表名必須在同一模式下

(3)表名 觸發器只能定義在基本表上,不能定義在檢視上 當基本表的資料發生變化時,將啟用定義在該表上相應觸    發事件的觸發器

觸發事件

觸發事件可以是INSERT、DELETE或UPDATE  

 也可以是這幾個事件的組合 還可以UPDATE OF<觸發列,...>,即進一步指明修改哪些列時啟用觸發器 AFTER/BEFORE是觸發的時機 AFTER表示在觸發事件的操作執行之後啟用觸發器 BEFORE表示在觸發事件的操作執行之前啟用觸發器

觸發器型別

行級觸發器(FOR EACH ROW) 語句級觸發器(FOR EACH STATEMENT)

觸發器的執行,是由觸發事件啟用的,並由資料庫伺服器自動執行 一個資料表上可能定義了多個觸發器,遵循如下的執行順序: (1) 執行該表上的BEFORE觸發器;

(2) 啟用觸發器的SQL語句;

(3) 執行該表上的AFTER觸發器。

刪除觸發器的SQL語法:

     DROP TRIGGER <觸發器名> ON <表名>;

觸發器必須是一個已經建立的觸發器,並且只能由具有相應許可權的使用者刪除

 

相關文章