Oracle 約束詳解(constraint)

2021-08-21 16:27:03 字數 3222 閱讀 7909

3 約束分類

1. 約束的作用

(1) 錄入 '規範' 的資料

(2)'定義規則',對資料庫中資料進行限制,確保資料正確性、有效性、完整性

1. 預設命名:sys_cn(n 為正整數)

2. 指定名稱:推薦如下

3. 若約束名稱長度超過 30 個位元組,則 "表名" 使用簡稱

約束型別

規範命名

名稱說明

主鍵約束

pk_表名_列名

primary key

外來鍵約束

fk_表名_列名

foreign key

非空約束

nn_表名_列名

not null

唯一約束

uk_表名_列名

unique key

檢查約束

ck_表名_列名

check

1. 常用檢視 (許可權由大到小: dba_*

> all_*

> user_*)(

1) dba_constraints : 側重約束具體資訊

(2) dba_cons_columns: 側重約束列資訊

2. 參考如下

select

*from dba_constraints dc

where dc.owner =

'scott'

and dc.table_name =

'emp'

;select

*from dba_cons_columns dcc

where dcc.owner =

'scott'

and dcc.table_name =

'emp'

;

-- 1.唯一性約束

alter

table 表名 add

constraint uk_*

unique

(列名)

[not

null];

-- 2.檢查約束

alter

table 表名 add

constraint ck_*

check

(列名 between

1and

100)

;alter

table 表名 add

constraint ck_*

check

(列名 in

('值1'

,'值n'))

;-- 3.非空約束(多個約束中,not null 位於末尾)

alter

table 表名 modify

(列名 constraint nk_*

notnull

);

alter

table 表名 drop

constraint 約束名;

alter

table 表名 rename

constraint 約束名 to new_約束名;

-- 1.禁用 disable

alter

table 表名 disable

constraint 約束名 [

cascade];

-- 2.啟用 enable

alter

table 表名 enable

constraint 約束名 [

cascade

];

create

table scott.*** (

***_code varchar2(2)

constraint pk_***_code primary

key,

***_desc varchar2(10)

);

create

table scott.student_info (

sno number(10)

constraint pk_student_info_sno primary

key,

sname varchar2(30)

, ***_code varchar2(2)

,constraint fk_student_info_***_code foreign

key(***_code)

references scott.***(***_code)

);

外來鍵約束有以下 3 種情況:子表 引用 父表

1. 普通外來鍵約束: 刪除 父表 記錄時,'報錯'。'預設'

2. 級聯外來鍵約束: 刪除 父表 記錄時,同時 '刪除子表記錄'

3. 置空外來鍵約束: 刪除 父表 記錄時,同時將 '子表記錄置為 null'

關係圖如下:

create

table scott.temp_u (

tno number(10)

constraint tk_temp_u_tno unique

notnull

);

create

table scott.temp_c (

age number(3)

constraint ck_temp_c_age check

(age between

1and

150)

, *** varchar2(2)

constraint ck_temp_c_*** check

(*** in

('男'

,'女'

,'未說明'))

);

create

table scott.temp_n (

create_date date

constraint nn_temp_n_create_date not

null

);

Oracle 約束詳解

約束是資料庫用來確保資料滿足業務規則的手段,不過在真正的企業開發中,除了主鍵約束這類具有強需求的約束,像外來鍵約束,檢查約束更多時候僅僅出現在資料庫設計階段,真實環境卻很少應用,更多是放到程式邏輯中去進行處理。這也比較容易理解,約束會一定程度上較低資料庫效能,有些規則直接在程式邏輯中處理就可以了,同...

Oracle約束 Constraint 詳解

主鍵約束 primary key 主鍵是定位表中單個行的方式,可唯一確定表中的某一行,關係型資料庫要求所有表都應該有主鍵,不過oracle沒有遵循此範例要求,oracle中的表可以沒有主鍵 這種情況不多見 關於主鍵有幾個需要注意的點 鍵列必須必須具有唯一性,且不能為空,其實主鍵約束 相當於 uniq...

Oracle建立約束 刪除約束

1.定義not null 約束not null 約束只能在列級定義,不能在表級定義 例 create table emp01 eno int not null,name varchar2 10 constraint nn name2 not null,salary number 6,2 2.定義un...