數據庫的完整性:數據的正確性和相容性。
關系模型的實體完整性,CREATE TABLE中用PRIMARY KEY定義。單屬性構成的碼有兩種說明方法:定義為列級約束條件;定義為表級約束條件。對多個屬性構成的碼只能定義為表級約束條件。
插入或對主碼列進行更新操作時,DBMS按照實體完整性規則自動進行檢查。包括:檢查主碼值是否唯一;檢查主碼的各個屬性是否為空。檢查記錄中主碼值是否唯一的一種方法是進行全表掃描。
關系模型中的參照完整性定義,在CREATE TABLE中用FOREIGN KEY短語定義哪些列為外碼。用REFERENCES短語指明這些外碼參照那些表的主碼。
參照完整性違約處理:拒絕執行,默認策略;級聯操作;設置為空值,對于參照完整性,除了應該定義外碼,還應定義外碼列是否允許空值。
用戶定義的完整性就是針對某一具體應用的數據必須滿足的語義要求。DBMS提供,而不必由應用程序承擔。屬性上的約束條件的定義,CREATE TABLE時定義:列值非空(NOT NULL);列值唯一(UNIQUE);檢查列值是否滿足一個布爾表達式(CHECK)。在CREATE TABLE時可以用CHECK短語定義元組上的約束條件,即元組級的限制。
完整性約束命名字句。CONSTRAINT 約束。使用ALTER TABLE語句修改表中的完整性限制。
SQL支持域的概念,并可以用CREATE DOMAIN語句建立一個域以及該域應該滿足的完整性約束條件。
觸發器是用戶定義在關系表上的一類由事件驅動的特殊過程。由服務器自動激活,可以僅有更為復雜的檢查和操作,具有更精細和更強大的數據控制能力。
定義觸發器。CREATE TRIGGER <觸發器名> {BEFORE | AFTER} <觸發事件> ON <表名> FOR EACH {ROW | STATEMENT} [WHEN <觸發條件>] <觸發動作體>。觸發事件:INSERT、DELETE、UPDATE;觸發器類型:行級觸發器(FOR EACH ROW),語句級觸發器(FOR EACH STATEMENT)。
觸發器的執行是由觸發事件激活的,并由數據庫服務器自動執行。一個數據表上可能定義了多個觸發器,執行順序:執行BEFORE觸發器,激活SQL語句,執行AFTER觸發器。
刪除觸發器的SQL語法。DROP TRIGGER <觸發器名> ON <表名>;,必須是已經創建的觸發器,并且只能由具有相應權限的用戶刪除。