Oracle 約束詳解(constraint)


 

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
);

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM