Oracle中六種約束及列級表級約束


Oracle中約束有:主鍵約束、唯一約束、外鍵約束、檢查約束、非空約束、默認約束

一、主鍵約束(primary key constraint)

  主鍵約束:要求主鍵列數據唯一,且不能為空

 

二、唯一約束(unique constraint)

  唯一約束:要求該列唯一,可以為空,但不能出現一個空值

    

  主鍵和唯一的區別:

 

  a.主鍵不能為NULL,唯一可以為NULL

 

  b.主鍵可以是復合主鍵,也可以是單值主鍵

 

  c.一張表中只能設置一次主鍵(復合主鍵),但唯一鍵可以設置多次

 

 

三、外鍵約束(foreign key constraint)

  外鍵約束:用於兩表間建立連接,需要指定引用主表的哪一列

 

四、檢查約束(check constraint)

  檢查約束:某列取值范圍限制,格式限制等,如有關年齡的約束

 

五、非空約束(not null constraint)

  非空約束:用於確保列不能為NULL,如果在列上定義了非空約束,那么當插入數據時,必須為該列提供數據,當更新列數據時,不能將其值設置為NULL

    

六、默認約束(default constraint)

 

舉例:創建一張表,里面用到主鍵約束、唯一約束、檢查約束、非空約束、默認約束

create table student (

stuno number(3) primary key,  --主鍵約束

stuname varchar2(10) unique,  --唯一約束

stuaddress varchar2(20) default '廣東省廣州市' check(length(stuaddress)>2)  --默認約束和檢查約束(若插入數據時在當前位置的字段值寫default,則                                                                                                                                                --使用‘廣東省廣州市’作為當前值,check表示字段值長度要大於2,否則會                                                                                                                                          --報錯)

);

 

注意事項:

1、報錯:違反唯一約束條件:有可能主鍵報錯,也可能是唯一約束報錯

2、如果有多個約束,default必須放在第一位

3、check約束:編寫方法與where完全相同

4、唯一約束:可以時null,但是不適用於null(原因是可以有多個null)

 

約束命名:

規范:constraint 約束類型_字段名

1、主鍵約束:PK_字段名

2、檢查約束:CK_字段名

3、唯一約束:UQ_字段名

4、非空約束:NN_字段名

5、外鍵約束:FK_子表_父表

6、默認約束:一般不需要命名

例: 

create table student (

stuno number(3) constraint PK_stuno primary key, 

stuname varchar2(10) constaint UQ_stuname unique constraint NN_stuname not null, 

stuaddress varchar2(20) default '廣東省廣州市'  constraint CK_stuaddress check(length(stuaddress)>2) 

);

 

約束按照創建方式分為:表級約束和列級約束

1、列級約束:作用於一個列,定義在列的后面,可以有多個約束,用空格隔開,有六種可定義的約束

2、表級約束:作用於一個列或者多列,定義在表的后面,用逗號隔開,有四種可定義的約束(主鍵、外鍵、唯一、檢查)

3、特殊:某些特殊情況只能使用表級約束,列級約束無法完成創建,

      例如1、創建復合索引就必須使用表級索引,才能創建成功

     2、創建非空約束,必須在列級進行定義,不能在表級創建

 

4、列級約束例子: 

  create table student (

 

  stuno number(3) constraint PK_stuno primary key, 

 

  stuname varchar2(10) constaint UQ_stuname unique constraint NN_stuname not null, 

 

  stuaddress varchar2(20) default '廣東省廣州市'  constraint CK_stuaddress check(length(stuaddress)>2) 

 

  );

 

5、表級約束例子:

  create table student2(
  stuno number(3) ,
  stuname varchar2(10) ,
  stuaddress varchar2(20) ,
  stubid number(3),
  constraint PK_sno primary key(stuno) ,
  constraint UQ_sname_subid unique(stuname,stubid),
  constraint CK_saddress check( length(stuAddress)>2)
  );

 


免責聲明!

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



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