一、完整性約束條件
1.實體完整性
實體完整性:理解爲對客觀世界的實體來說,例如學生的學號這一屬性,應該是唯一存在的。所以實體完整性表現爲:PRIMARY KEY(主鍵)
PRIMARY KEY:屬性唯一,屬性不爲空。
注意:單屬性主碼纔可以定義爲列級實體完整性,多屬性主碼只能定義爲表級實體完整性。
2.參照完整性
參照完整性:多個關係表之間如果有外鍵相互參照的話,對於某表的操作勢必會影響另一個表。這種改變是否符合原來關係表之間的規則就叫做是否遵守參照完整性。
參照完整性違規處理的舉例:
FOREIGN KEY(Sno) REFERENCES Student(Sno) ON DELETE CASCADE;
注意這裏的主從對象,當對Student的Sno屬性進行刪除時,就會級聯刪除當前表的Sno屬性。主對象是Student表,從對象是當前表。
3.用戶定義完整性
用戶定義完整性:即用戶自己添加的約束條件,例如 NOT NULL,UNIQUE,還有更一般的表示方式:CHECK子句,當CHECK中的條件滿足時,才允許對數據庫執行插入元組或修改元組的操作。
二、完整性約束命名子句
1.引入完整性約束命名子句的目的
以往的約束條件在CREATE TABLE時創建,比如 NOT NULL等約束條件,這些條件在表創建之後,是無法修改的,除非刪除掉該表,然後再重新建表,重新指定約束條件。當一個表中有幾千條列的時候,會顯得十分繁瑣,所以引入完整性約束命名子句。好處是可以通過ALTER對錶中的約束條件進行增加刪除更改等操作,十分方便。
對錶的完整性約束命名子句的更改操作舉例:
ALTER TABLE Student
DROP CONSTRAINT C4;
代表刪除Student表的約束條件C4
三、斷言
1.斷言的理解
SQL中可以使用CREATE ASSERTION語句,通過聲明斷言來指定更具一般性的約束。可以定義涉及多個表或聚集操作的比較複雜的完整性約束。斷言創建以後,任何對斷言中涉及的表的操作都會觸發DBMS對斷言的檢查,任何使斷言不爲真值的操作都會被拒絕執行。一個斷言就是一個謂詞表達式,它表達了希望數據庫總能滿足的條件,表約束與列約束就是一些特殊的斷言。