約束條件也稱作完整性約束條件,是在數據表上強制執行的一些數據檢驗規則,當執行DML操作時必須符合約束條件,否則不能成功執行。約束條件包括有非空(Not Null)、唯一(Unique)、主鍵(Primary Key)、外鍵(Foreign Key)和檢查(Check)。約束條件可以在建表時建立也可以在建表後建立。約束條件需要命名,可以由用戶指定,否則由系統按照SYS_Cn的默認格式來命名,n是一串數字。
工具/原料
已安裝有Oracle數據庫11g
已安裝有Oracle SQL Developer
Windows 操作系統
非空(Not Null)
非空(Not Null)約束用於確保字段值不為空。非空約束是五個約束條件中唯一一個只能定義在列級的約束條件。非空約束條件可以在建表時建立,也可以在建表後建立。如下圖:
在數據字典中查詢剛剛建立的非空約束條件。
唯一(Unique)
唯一約束條件用於保證字段或者字段的組合不出現重複值。同樣唯一約束條件可以在建表時建立,也可以在建表後建立。如下圖:
在數據字典中查詢唯一約束條件:
主鍵(Primary Key)
主鍵約束條件從功能上看相當於非空且唯一。主鍵可以是單字段也可以是多字段組合。在一個白哦上只允許建立一個主鍵,而其他約束條件則沒有明確的個數限制。在建表時建立主鍵約束:如下圖
在建表後建立表級約束如下圖:
在數據字典中查看主鍵約束條件:
外鍵(Foreign Key)
外鍵約束條件定義在兩個表的兩個字段或一個表的兩個字段上,用於保證相關兩個字段的關係。
外鍵約束包括兩個方面的數據約束:
(1):子表上定義的外鍵的列值,必須從主表被參照的列值中選取,或者為NULL;
(2):當主表參照的值被子表參照時,主表的該行記錄不允許被刪除。
在數據字典中查看外鍵約束條件:
在外鍵約束中有兩個短語是可選的分別為ON DELETE CASCADE和ON DELETE SET NULL.前一個用於指定級聯刪除選項,當刪除主表數據時會級聯刪除從表的相關數據;後一個表示當刪除主數據時,將從表的外鍵列值設置為NULL
檢查(Check)
檢查約束條件用來強制在字段上的每個值都要滿足Check中定義的條件。
在數據字典中查看檢查約束條件:
約束條件的啟用和禁用
從字面上我們應該就能知道該功能的用途了。禁用和啟用約束條件的語法如下:
ALTER TABLE table_name
DISABLE ENABLE CONSTRAINT constraint_name [CASCADE];
禁用Check約束:
啟用Check約束:
如果禁用的是主鍵約束條件,且這個主鍵被其他列的外鍵約束參照,則一種選擇是使用CASCADE短語,進行級聯操作,另一種是先將外鍵約束條件禁用或刪除,再禁用主鍵約束。
修改約束條件的名稱
當希望修改約束條件的名稱時,可以使用ALTER TABLE的RENAME CONSTRAINT子句修改約束條件的名稱。語法如下:
ALTER TABLE table_name
RENAME CONSTRAINT old_cons_name TO new_cons_name;
具體實現如下圖:
注意事項
英文非空約束只能定義在列級,故在建表後在增加非空約束條件,只能使用ALTER TABLE的MSDIFY子句,而不能使用ADD CONSTRAINT子句
一般約束條件的命名規則是:表名_列名_約束條件類型
當約束條件建立好後,可以通過字典USER_CONSTRAINTS和UESR_CONS_COLUMNS查看。經常使用到的字段報告OWNER(約束條件所有人)、CONSTRAINT_NAME(約束條件的名稱)、CONSTRAINT_TYPE(約束條件的類型)、TABLE_NAME(約束條件的名稱)以及COLUMN_NAME(建立了約束條件的列名)