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