1 概述
1. 約束的作用 (1) 錄入 '規范' 的數據 (2) '定義規則',對數據庫中數據進行限制,確保數據正確性、有效性、完整性
2 約束管理
2.1 約束命名規范
1. 默認命名:SYS_Cn(n 為正整數)
2. 指定名稱:推薦如下
3. 若約束名稱長度超過 30 個字節,則 "表名" 使用簡稱
約束類型 規范命名 名稱說明
主鍵約束 PK_表名_列名 Primary Key
外鍵約束 FK_表名_列名 Foreign Key
非空約束 NN_表名_列名 Not Null
唯一約束 UK_表名_列名 Unique Key
檢查約束 CK_表名_列名 Check
2.2 約束信息查詢
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';
2.3 添加約束
-- 1.唯一性約束 alter table 表名 add constraint uk_* unique(列名) [not null]; -- 2.檢查約束 alter table 表名 add constraint ck_* check(列名 between 1 and 100); alter table 表名 add constraint ck_* check(列名 in ('值1', '值n')); -- 3.非空約束(多個約束中,not null 位於末尾) alter table 表名 modify(列名 constraint nk_* not null);
2.4 刪除約束
alter table 表名 drop constraint 約束名;
2.5 重命名約束
alter table 表名 rename constraint 約束名 to new_約束名;
2.6 禁用啟用約束
-- 1.禁用 disable alter table 表名 disable constraint 約束名 [cascade]; -- 2.啟用 enable alter table 表名 enable constraint 約束名 [cascade];
3 約束分類
3.1 主鍵約束 P
create table scott.sex ( sex_code varchar2(2) constraint pk_sex_code primary key, sex_desc varchar2(10) );
3.2 外鍵約束 R
create table scott.student_info ( sno number(10) constraint pk_student_info_sno primary key, sname varchar2(30), sex_code varchar2(2), constraint fk_student_info_sex_code foreign key(sex_code) references scott.sex(sex_code) );
外鍵約束有以下 3 種情況:子表 引用 父表
1. 普通外鍵約束: 刪除 父表 記錄時,'報錯'。'默認' 2. 級聯外鍵約束: 刪除 父表 記錄時,同時 '刪除子表記錄' 3. 置空外鍵約束: 刪除 父表 記錄時,同時將 '子表記錄置為 null'

3.3 唯一約束 U
create table scott.temp_u ( tno number(10) constraint tk_temp_u_tno unique not null );
3.4 檢查約束 C
create table scott.temp_c ( age number(3) constraint ck_temp_c_age check(age between 1 and 150), sex varchar2(2) constraint ck_temp_c_sex check(sex in ('男', '女', '未說明')) );
3.4 非空約束
create table scott.temp_n ( create_date date constraint nn_temp_n_create_date not null );
