oracle表的约束类别有,主键约束、唯一约束、检查约束、外键约束、和空/非空约束五种:
主键约束特点:
1.定义主键,起唯一标识作用,其值不能为空,也不能重复
2.一个表中只能定义一个主键约束
3.建立主键约束的同时,在该列上建立一个唯一性索引,可以为它制定存储位置和存储参数
4.主键约束既可以是列约束,也可以是表级约束
唯一性约束:
1.定义为唯一性的某一列或多个列的组合的取值必须唯一
2.如果某一列或多个列仅定义唯一性约束,而没有定义非空约束,则该约束列可以包含多个空值
3.oracle自动在唯一性约束列上建立一个唯一性索引,可以为它指定存储位置和存储参数
4.唯一性约束既可以是列级约束,也可以是表级约束
检查约束特点:
1.检查约束是用来限制列的取值范围的,其表达式中必须引用相应的列,并且表达式的计算结果必须是一个布尔值
2.约束表达式中不能包含子查询,也不能包含sysdate,user,等sql函数和rowid,rownum等伪列
3.一个列可以定义多个检查约束
4.检查约束既可以是列级约束,也可以是表级约束
外键约束特点:
1.定义外键约束的列的取值要么是主表参照列的值,要么为空
2.外键列只能参照于主表中的主键约束或唯一约束列
3.可以在一列或多列组合上定义外键约束;
4.外键约束既可以是列级约束,也可以是表级约束
空/非空约束特点:
1.在一个表中可以定义多个not null约束
2.只能定义列级约束
举例说明上面五种约束的用法:
SQL>create table student(
sno number(6) constraint s_pk primary key,
sname varchar2(10) not null,
sex char(2) constraint s_ck1 check(sex in ('M','F')),
sage number(6,2),
constraint s-ck2 check(sage between 18 and 60),
);
说明:
在sno列上创建了一个名为s_pk的主键约束,为列级约束
在sname列上创建了一个非空约束,系统自动命名,为列级约束
在sex列上创建了一个检查约束,名为s_ck1,为列级约束,sex列取值只能为‘M’或‘F’
在sage列上创建了一个检查约束,名称为s_ck2,为表级约束,sage列取值范围为18到60之间