數據完整性和DML語句 數據完整性 數據完整性(Data Integrity)是指數據的精確性(Accuracy) 和可靠性(Reliability)。它是應防止資料庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。數據完整性指存儲在資料庫中的所有數據值均正確的狀 ...
數據完整性和DML語句
數據完整性
數據完整性(Data Integrity)是指數據的精確性(Accuracy) 和可靠性(Reliability)。它是應防止資料庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。
數據完整性指存儲在資料庫中的所有數據值均正確的狀態。如果資料庫中存儲有不正確的數據值,則該資料庫稱為已喪失數據完整性。
資料庫採用多種方法來保證數據完整性,包括約束、規則和觸發器。
什麼是約束
約束是在表上強制執行的數據校驗規則.
約束主要用於保證資料庫的完整性。
當表中數據有相互依賴性時,可以保護相關的數據不被刪除.
大部分資料庫支持下麵五類完整性約束:
NOT NULL非空
UNIQUE Key唯一鍵
PRIMARY KEY主鍵
FOREIGN KEY外鍵
CHECK檢查
DEFAULT預設值
約束概述
約束作為資料庫對象,存放在系統表中,也有自己的名字
創建約束的時機
在建表的同時創建
建表後創建(修改表)
按照創建方式可分為列級和表級約束
列集約束與表集約束
列級約束直接跟在列後定義,不再需要指定列名,與列定義之間用空格分開。
表級約束通常放在所有的列定義之後定義,要顯式指定對哪些列建立列級約束。與列定義之間採用英語逗號,隔開。
如果是對多列建聯合約束,只能使用表級約束語法。
非空約束(Not null)
列級約束,只能使用列級約束語法定義。
確保欄位值不允許為空
只能在欄位級定義
實例
CREATE TABLE tb_student(
id number PRIMARY KEY,
NAME VARCHAR2(18) NOT NULL
)
唯一約束
唯一性約束條件確保所在的欄位或者欄位組合不出現重覆值
同一張表內可建多個唯一約束
唯一性約束條件的欄位允許出現多個NULL
唯一約束可由多列組合而成
建唯一約束時Oracle會為之建立對應的索引。
CREATE TABLE tb_student(
id number PRIMARY KEY,
NAME VARCHAR2(18) UNIQUE NOT NULL
)
主鍵約束
主鍵是表中唯一確定一行數據的欄位。
一個表中只允許一個主鍵
主鍵從功能上看相當於非空且唯一
主鍵約束不允許為NULL
主鍵欄位可以是單欄位或者是多欄位的組合
當建立主鍵約束時,Oracle為主鍵創建對應的索引
CREATE TABLE tb_student(
id number PRIMARY KEY,
NAME VARCHAR2(18)
)
定義複合主鍵
當定義約束的時候, 不僅可以基於單列定義約束,也可以基於多列定義複合約束.
註意, 複合約束只能在表級中定義.
create table emp01(
lastname varchar2(25),
firstname varchar2(25),
code varchar2(25),
constraint emp01_pf
primary key(lastname,firstname)
);
一般情況下,一個表都應該有一個主鍵,建立主鍵的原則“最少性,穩定性”。
外鍵約束
外鍵是構建於一個表的兩個欄位或者兩個表的兩個欄位之間的關係
外鍵確保了相關的兩個欄位的兩個關係:
子(從)表外鍵列的值必須在主表參照列值的範圍內,或者為空(也可以加非空約束,強制不允許為空)。
當主表的記錄被子表參照時,主表記錄不允許被刪除。
外鍵參照的只能是主表主鍵或者唯一鍵,保證子表記錄可以準確定位到被參照的記錄。
格式FOREIGN KEY (外鍵列名)REFERENCES 主表(參照列)
ON DELETE CASCADE:當父表中的行被刪除的時候,同時刪除在子表中依靠的行
ON DELETE SET NULL:將依靠的外鍵值轉換為空值