廣義完整性:語義完整性,併發控制,安全控制,故障恢復 狹義完整性:專指語義完整性 完整性涉及實體完整性,參照完整性,用戶自定義完整性 DBMS保證完整性 由資料庫管理員來定義完整性規則,當用戶進行資料庫操作時。先由完整性控製程序根據完整性規則來檢查請求是否合法,如果合法則交給DBMS執行更新操作。 ... ...
廣義完整性:語義完整性,併發控制,安全控制,故障恢復
狹義完整性:專指語義完整性
完整性涉及實體完整性,參照完整性,用戶自定義完整性
DBMS保證完整性
由資料庫管理員來定義完整性規則,當用戶進行資料庫操作時。先由完整性控製程序根據完整性規則來檢查請求是否合法,如果合法則交給DBMS執行更新操作。
完整性約束分類
按約束對象分類
- 域完整性約束條件
施加於某一列上的約束,比如姓名只能是男或者女
- 關係完整性約束
涉及到多列,比如城市的取值必須依賴於省份
按約束來源分類
- 結構約束
函數依賴約束,主鍵約束,外鍵約束
- 內容約束
來自用戶的約束,取值範圍等等
按約束狀態分類
- 靜態約束
在任意時刻均滿足的約束:例如人的年齡應該大於0而小於150(假定人最多活150)
- 動態約束
要求屬性值從一種狀態到另一種狀態的約束,例如:人的年齡只能增加,不能減少
約束的實現
當我們在創建表的時候可以添加列完整性約束和表完整性約束。下麵是列約束的基本格式
示例
我們創建了一個student表,在表中定義了下麵屬性
- S# 不能取空值且取值唯一
- Sname 無約束
- Ssex 定義了一個名為ctssex的約束,方便以後修改表結構時來通過約束名來直接修改約束。該約束的內容是檢測屬性值是否為男或者女,檢查成功則允許更新
- Sage 檢查屬性值是否在1到150之間,符合條件則更新
- D# 將該屬性定義為外鍵,對應Dept表中的主鍵D#,on delete cascade是關聯性操作。表示在Dept表中某一元組被刪除(該元組的主鍵值為001),則在student表中對應的元組(該元組中的外鍵值為001)也應該被刪除。
表約束格式
示例
圖中的藍色字體是表約束,定義了主鍵為C#,定義了一個約束為ctcc,該約束涉及到兩列Chours和Credit。
為表定義外鍵,當然上面的表約束也可以直接變為列約束
check中也可以直接寫查詢語句
修改約束