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

 

posted @ 2021-08-30 11:33  Brack_Pearl  阅读(2497)  评论(0编辑  收藏  举报