資料庫的完整性約束

2021-08-26 11:52:54 字數 2594 閱讀 8254

一、資料庫的完整性約束定義

資料庫的完整性約束是為了防止不符合規範的資料進入資料庫,在使用者對資料進行插入、修改、刪除等操作時,dbms自動按照一定的約束條件對資料進行監測,使不符合規範的資料不能進入資料庫,以確保資料庫中儲存的資料正確、有效、相容。資料庫的完整性約束包括:

1) 實體完整性:規定表的每一行在表中是惟一的實體。 

2) 域完整性:是指表中的列必須滿足某種特定的資料型別約束,其中約束又包括取值範圍、精度等規定。 

3) 參照完整性:是指兩個表的主關鍵字和外關鍵字的資料應一致,保證了表之間的資料的一致性,防止了資料丟失或無意義的資料在資料庫中擴散。 

4) 使用者定義的完整性:不同的關係資料庫系統根據其應用環境的不同,往往還需要一些特殊的約束條件。使用者定義的完整性即是針對某個特定關聯式資料庫的約束條件,它反映某一具體應用必須滿足的語義要求。

二、常用的完整性約束

1、主鍵約束:

主鍵約束是為了保證實體完整性,

主鍵約束就是對乙個列進行了約束,約束為非空且唯一。

以下是**   要對乙個列加主鍵,列名為id,表名為emp

格式為:

alter table **名稱 add constraint 約束名稱 增加的約束型別 (列名)

例子:alter table emp add constraint ppp primary key (id)

2、check約束:

屬於域完整性,給一列的資料進行了限制。

比方說,年齡列的資料都要大於20的

表名(emp) 列名(age)

格式:alter table 表名稱 add constraint 約束名稱 增加的約束型別 (列名)

例子:alter table emp add constraint *** check(age>20)

3、unique約束:

這樣的約束就是給列的資料追加的不重複的約束型別

格式:alter table 表名 add constraint 約束名稱 約束型別(列名)

比方說可以給ename列加個unique,讓ename列的資料不重複

例子:alter table emp add constraint qwe unique(ename)

4、預設約束:

意思很簡單就是讓此列的資料預設為一定的資料

格式:alter table 表名稱 add constraint 約束名稱 約束型別 預設值) for 列名

比方說:emp表中的gongzi列缺省為10000

alter table emp add constraint jfsd default 10000 for gongzi

5、外來鍵約束:

外來鍵其實就是引用,

因為主鍵實現了實體的完整性,

外來鍵實現了引用的完整性,

應用完整性規定,所引用的資料必須存在!

比方說乙個表名稱叫dept 裡面有2列資料 一列是id一列是ename

id:表示產品的編號

ename:表示產品的名稱

另外乙個**名稱是emp 裡面有2列資料,一列是id 一列是did

id:表示使用者號

did:表示購買的產品號

要讓emp表中的did列去引用dept表中的id

可以用下面的方法

格式:alter table 表名 add constraint 約束名稱 約束型別 (列名) references 被引用的表名稱(列名)

例子:alter table emp add constraint jfkdsj foreign key (did) references dept (id)

三、即時(immediate)約束與延遲(deferred)約束

deferred:如果 oracle 在事務提交(commit)時才對約束執行檢查,則稱此約束是延遲的(deferred)。如果資料違反了延遲約束,提交操作將導致事務被回滾(undo)。 

immediate:如果約束是即時的(immediate)(非延遲的),則此約束將在語句執行結束後進行檢查。如果資料違反了延遲約束,語句將被立即回滾。

一般情況下,我們用的約束初始都是immediate型的(預設),而且不好轉為deferred型。但是如果初始是deferrable(需要手動指定),那deferred跟immediate 2種狀態可以隨意轉換。

四、約束的四種狀態

enable(啟用):確保所有輸入的資料都遵從約束(constraint) 。

disable(禁用):總是允許輸入資料,無論資料是否遵從約束 。

validate(驗證):確保已存在的資料遵從約束 。

novalidate(無驗證):允許已存在的資料不遵從約束 。

enable validate 與 enable 相同。oracle 將檢查約束,並保證所有資料均遵從約束。

enable novalidate 表示所有新插入或被修改的資料都必須遵從約束,但允許已存在的資料不遵從約束。

disable novalidate 與 disable 相同。oracle 不會檢查約束.。

disable validate 將禁用約束,移除約束使用的索引,並禁止修改約束鍵的資料。 

約束不論哪種型別,要能夠生效,必須狀態是enable才行。

資料庫 完整性約束

問題描述 現有乙個商店的資料庫 shopping 記錄客戶及其購物情況,由以下四個關係組成 a 客戶表customer 儲存客戶資訊,包括客戶號customerid 客戶姓名cname 位址address 電子郵件email 性別gender 身份證號cardid 號碼telcode。b 商品表go...

資料庫的完整性約束

完整性約束條件的作用物件 元組 或稱作 row,一條資料 約束 表級約束 外來鍵 實體完整性 實體的完整性是通過主鍵 primary key 約束和候選鍵 candidate key 約束來實現的。所以前提條件是要了解鍵的一些概念和分類 舉個例子 例如有 students 表,含有字段 stu nu...

資料庫 資料完整性約束

資料完整性 儲存在資料庫中的所有資料值均正確的狀態。完整性約束 防止不符合規範的資料進入資料庫,在使用者對資料進行插入 修改 刪除等操作時,dbms自動按照一定的約束條件對資料進行監測,使不符合規範的資料不能進入資料庫,以確保資料庫中儲存的資料正確 有效 相容。1.實體完整性 實體完整性是對主鍵的約...