第十四章約束

2021-07-04 10:30:52 字數 3834 閱讀 1482

約束:

constraint:是一種保證資料完整性的規則。約束設定在單個字段或者多個字段組合上,寫入這些欄位的行資料必須要符合約束的規則

約束的五種型別:

not null         非空約束,指定某列的所有行資料不能包含空值

unique          唯一性約束,指定列或者列的組合的所有行資料必須唯一 

primary key        主鍵約束,表的每行的唯一性標識,指定列或者列的 

組合的所有行資料必須唯一 

foreign key        外來鍵約束,在列及引用列上建立的一種強制依賴關係 

check           檢查性約束,在列上指定乙個必須滿足的條件 

約束命名規則 

• 約束也是資料庫物件,必須按照命名規則命名,如果你不命名約束,oracle

伺服器將用

sys_cn

格式產生乙個名字,這裡

n是乙個唯一的整數。 

• 除了not null

約束外,建議給其它約束起名字,命名規則為:表名_列名

_約束型別。  《

約束操作》

• 定義約束:約束通常在建立表的同時被建立; 

• 追加約束:在表被建立後,如果有需求也可以臨時新增約束; 

• 啟用及禁用約束:約束可以被臨時禁用和啟用。 

定義約束:

–約束既可以寫在每個對應列的後面,稱之為列級別約束,乙個列級別約束只能作 

用在乙個列上; 

–也可以寫完所有列之後,再寫約束,稱之為表級別約束,乙個表級別約束既可以 

作用在乙個列上,也可以作用在列的組合上; 

–not null約束只能定義在列級別上

,聯合主鍵或聯合唯一性約束只能定義在表級 

別上(限定在列的組合上的)

,其它約束既可以定義成表級別,也可以定義成列級別; 

–列級別約束和表級別約束達到的作用完全相同,只是書寫的位置不同; 

–constraint:

約束的關鍵字;

constraint_name:

約束名字;

constraint_type

:約 

束的型別;

• not null

約束 :也叫非空約束,確保被約束列的所有行記錄都不能為空值。只能定義在列級別上。 

• unique

約束:也叫唯一約束,用來確保表中的某一列或者某幾列組合的所有行資料必須唯一,定義unique

約束的列 

(或列組合

) 被稱為唯一鍵。 

• 每個表可以有多個為unique

約束。  

• unique

約束允許輸入空值,除非我們在相應的列上定義

not  null 

約束。 

primary key約束

:主鍵約束,用來確保表中的某一列或者某幾列組合的所有行資料必須唯一,並且確保作為主鍵一部分的列不能包含空值; 

• 每個表只能建立乙個主鍵約束。

主鍵和唯一鍵的區別:

1,唯一性約束鍵預設沒有

not null

約束,而主鍵預設有乙個 

not null,

2,乙個表中最多只能有乙個主鍵,可以有多個唯一鍵

通常把唯一標識一行的,流水號----主鍵

身份證--------

唯一鍵

• foreign key

,也叫外來鍵約束

–外來鍵列的值必須在引用列值的範圍內,或者為空; 

–外來鍵參照的是列必須是主鍵或者唯一鍵; 

• 主鍵錶主鍵值被外來鍵表參照時,主鍵表記錄不允許被刪除。 

• foreign key: 

定義在子表的列中 

• references: 

引用列所在的父表 

• 注: 

–on delete cascade:

當父表中的行被刪除時,子表中相依賴的行同時被刪除;(級聯) 

–on delete set null:

當父表的行被刪除時,子表中相依賴的行被轉換為空值; 

–無on delete cascade

或on delete set null

選項,當附表中的行被刪除時,如果父表中的行在子表中被引用,則提示不能被刪除。 

• check

約束,也叫檢查性約束,確保某個列的所有行資料都必須滿足的條件,如: 

–sal number(8

,2) constraint dept_sal_min check 

(salary > 0) 

–要求sal

欄位的所有行資料必須大於0 

• 表示式不允許使用: 

–偽列,例如:currval, nextval, level

及rownum; 

–可以呼叫sysdate, uid, user

及userenv 

函式; 

–對其它記錄其它值的查詢。 

使用子查詢建立表的時候,約束不會被繼承過來,只是複製了一些表結構

追加約束 :

• 也可以用alter table

語句為表: 

–追加或刪除約束,但不修改它的結構; 

–啟用或禁用約束; 

–用modify

子句新增乙個

not null

約束; 

• 追加約束,語法為: 

alter table table add [constraint constraint] type (column); 

• 追加not null 

約束 

alter table table 

modify (column [constraint constraint]  not null); 

刪除約束:

• 語法 

alter table table drop primary key|unique(column) 

|constraint constraint [cascade]; 

• 在語法中: 

–table 

是表的名字 

–column 

是受約束影響的列的名字 

–constraint 

是約束的名字 

–cascade 

級聯刪除 

• 例:

從emp

表中刪除

emp_mgr_fk

約束 

alter table emp drop constraint emp_mgr_fk; 

• 例:

刪除dept

表上的primary key

約束,並且刪除相關聯的在

emp表

deptno

上的foreign key

約束; 

alter table dept drop primary key cascade; 

• drop

子句的cascade

選項導致任何與其相依賴的約束也被刪除。 

約束啟用與禁用 

• 約束禁用 

–如果有大批量資料匯入時,我們可以採用禁用約束的方法, 

主要的好處,首先效率高,另外有主外來鍵約束的表之間導 

入時,不用考慮匯入的先後順序。 

–禁用約束語法: 

alter table table  disable constraint constraint [cascade]; 

–應用cascade

選項禁用相依賴的外來鍵約束 

–啟用約束語法: 

alter table table  enable constraint constraint; 

第十四章 約束

第十四章 約束 練習1 1.學校有乙個選課系統,其中包括如下關係模式 系 系編號 主鍵,系名稱 唯一鍵,系主任 非空約束,系所在校去 取值範圍只能在南湖校區和渾南校區 create table xi xi no varchar2 10 primary key,xi name varchar2 10 ...

第十四章 集合

1.集合 把個數不定的物件一起帶著走 集合是乙個存放任意數量的引用的物件的容器 多個物件放在另乙個物件中,此物件可成為乙個集合物件 注意 如果集合物件建立時不指定泛型,則在當前集合中可以存放任意型別的物件 包括 collection list set map list 介面的實現類有arraylis...

C 《C Primer 》第十四章

可以被過載 不可以被過載 new new delete delete 是否是成員函式 ostream operator ostream os,const item istream operator istream is,data item class strvec const std string ...