一、實體完整性:
實體完整性規則:主屬性不能取空值
關係模型中:PRIMARY KEY
單屬性碼可以定義爲列級約束條件或者表級約束條件
多屬性碼則只能定義爲表級約束條件
實體完整性檢查和違約處理:
檢查主碼是否唯一,不唯一則拒絕插入或者修改
檢查主碼各屬性是否爲空,只要有一個爲空就拒絕插入、修改
二、參照完整性:
CREATE TABLE中FOREIGN KEY定義外碼,REFERENCES指明所參照的主碼
違約處理:
拒絕執行(NO ACTION):默認策略
級聯操作(CASCADE)
設置爲空值(SET-NULL)
三、用戶定義的完整性:
針對某一具體應用的數據必須滿足的語義要求
屬性上的約束條件定義:
列值非空(NOT NULL);列值唯一(UNIQUE);檢查列值是否滿足布爾表達式(CHECK)
屬性上的數據條件檢查和違約處理:
插入元組或修改屬性值時,RDBMS檢查約束條件是否被滿足,不滿足則拒絕執行操作;
元組級限制:CREATE TABLE時使用CHECK定義
四、完整性約束命名子句:
CONSTRAINT <完整性約束條件名>[NOT NULL]等
ALTER TABLE<表名> DROP CONSTRAINT<完整性約束條件名>
五、斷言
CREATE ASSERTION <斷言名><CHECK子句>
可以定義涉及多個表或者聚集操作的比較複雜的完整性約束條件;
斷言創建之後,任何對斷言中所涉及的操作都會觸發關係數據庫管理系統對斷言的檢查,使斷言不爲真值的操作都會被拒絕。
六、觸發器:
用戶定義在關係表上的一類由事件驅動的特殊過程,一旦定義,用戶對錶的增刪改查均由服務器自動激活相應的觸發器,在DBMS核心層進行完整性控制
觸發器:當特定的系統事件發生時,對規則的條件進行檢查,如果條件成立則執行規則中的動作,否則不執行,
觸發器的執行,是由觸發事件激活的,並由數據庫服務器自動執行。