约束

定义约束

CREATE TABLE [schema.]table 
(column1 datatype[DEFAULT expr] 
    [CONSTRAINT constraint_name]constraint_type],--列级别约束 
column2 datatype[DEFAULT expr] [CONSTRAINT constraint_name]constraint_type],--列级别约束 …… 
[CONSTRAINT constraint_name] constraint_type]--表级别约束 
    );

其中
–约束既可以写在每个对应列的后面,称之为列级别约束,一个列级别约束只能作用在一个列上;

–也可以写完所有列之后,再写约束,称之为表级别约束,一个表级别约束既可以作用在一个列上,也可以作用在列的组合上;

–NOT NULL约束只能定义在列级别上,联合主键或联合唯一性约束只能定义在表级 别上,其它约束既可以定义成表级别,也可以定义成列级别;

–列级别约束和表级别约束达到的作用完全相同,只是书写的位置不同;

–CONSTRAINT:约束的关键字;constraint_name:约束名字;constraint_type:约束的类型;

not null

概念:非空约束,确保被约束列 的所有行记录都不能为空值。
注意:只能定义在列级上。

例如:

create table emp(
ename varchar2(10) not null,
deptno number(7,2) not null);

unique

概念:唯一约束,用来确保表中的某 一列或者某几列组合的所有行数据必须唯一,定义UNIQUE约束的列(或列组合) 被称为唯一键。

例如:

create table dept(
dname varchar2(14) <constraint dept_dname_uk>(约束名,可写可不写,最好还是写一下) unique,
...
);

也可以定义在表一级

create table dept(
deptno number(2).
dname varchar2(14),
constraint dept_dname_uk unique(danme)
);

primary key

概念:主键约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,并且确保作为主键一部分的列不能包含空值;
注意:每个表只能创建一个主键约束。

例如:

create tablle dept(
deptno number(2) constraint dept_deptno_pk primary key,
...
)

也可以定义在表一级

create table deptment(
deptno number(2),
...
constraint dept_deptno_pk primary key(deptno),
...
);

foreign key

概念:外键约束,确保相关联的两个字段的关系:
–外键列的值必须在引用列值的范围内,或者为空;
–外键参照的是列必须是主键或者唯一键;
注意:主键表主键值被外键表参照时,主键表记录不允许被删除。

例如:

create table emp(
deptno number(7,2) not null constraint emp_deptno_fk refferences dept(deptno),
...
)

也可以定义在表一级

create table emp(
deptno number(7,2) not null.
...
constraint emp_deptno_fk foreign key (deptno) refferences dept(deptno)
on delete cascade(关联删除)
)

注:
–ON DELETE CASCADE:当父表中的行被删除时,子表中相依赖的行同时被删除;
–ON DELETE SET NULL:当父表的行被删除时,子表中相依赖的行被转换为空值;
–无ON DELETE CASCADE或ON DELETE SET NULL选项,当附表中的行被删除时,如果父表中的行在子表中被引用,则提示不能被删除。

check

概念:检查性约束,确保某个列的所有行数据都必须满足的条件。

例如:

sal number(8,2) constraint dept_sal_min check (sal>0)

注:
-不允许使用伪列。
-对其他值查询。

追加约束

语法:

ALTER TABLE tableADD [CONSTRAINT constraint] type (column);

在语法中:
–table 是表的名字
–constraint 是约束的名字
–type 是约束的类型
–column 是受约束影响的列的名字

删除约束

语法:

ALTER TABLE tableDROP PRIMARY KEY|UNIQUE(column)
|CONSTRAINT constraint[CASCADE];

在语法中:
–table 是表的名字
–column 是受约束影响的列的名字
–constraint 是约束的名字
–cascade 级联删除

约束禁用

语法:

ALTER TABLE tableDISABLE CONSTRAINT constraint[CASCADE]; 

启用:

ALTER TABLE tableENABLE CONSTRAINT constraint; 

相关数据字典

–和约束相关的数据字典有: USER_CONSTRAINTS:查看表上所有的约束。
USER_CONS_COLUMNS:查看与约束相关的列名,该字典对于那些由系统指定名字的约束特别有用。
–在约束类型中,C代表CHECK,P代表PRIMARY KEY,R代表FOREIGN KEY,U代表UNIQUE,NOT NULL约束实际上是一个CHECK约束。