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...