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