1. 约束分类:
1) NOT NULL:确保列不能为NULL。如果列上定义了NOT NULL 约束,插入数据时,必须为该列提供数据。
2) UNIQUE约束用于唯一标识列的数据。当定义了唯一约束后,唯一约束列的列支不能重复,但允许列为NULL。当在表的某一列上定义了唯一约束后,默认情况下Oracle会自动基于唯一约束列建立唯一索引,并且索引名与约束名完全一致。
3) PRIMARY KEY:主键约束
4) FOREIGN KEY:外键约束,定义了主从表之间的关系。外键约束要定义在重表上,但主表必须具有主键约束或唯一约束。定义了外键约束后,要求外部健列的数据必须在主表的主键列中存在,或者为NULL。
5) CHECK:CHECK约束用于强制表行数据必须满足的条件。
2. 约束的状态
1) ENABLE VALIDATE(默认状态)当将约束转变为ENABLE VALIDATE状态时,要求新旧数据必须同时满足约束规则。假定在NAME列上定义了唯一约束,那么将约束转变为ENABLE VALIDATE状态时,NAME列上不能有重复值。
如果在定义和增加约束时不指定约束状态,则约束的默认状态为ENABLE VALIDATE状态。
2) ENABLE NOVALIDATE 当约束转为此状态时,已存在数据可以不满足该约束,新增数据必须满足此约束规则。
3) DISABLE VALIDATE 此状态不允许在表上执行任何DML操作。对于主键和唯一约束来说,会删除相应的唯一索引,但约束规则仍然有效。
该状态主要用于分区表和非分区表之间使用ALTER TABLE …EXCHANGE PARATITION命令进行数据交换。
4) DISABLE NOVALIDATE对于主键和唯一约束来说,为删除相应的唯一索引,约束规则失效。
3. 使用延期约束检查 默认情况下,当执行DML操作时,如果键入了违反约束规则的数据,则会立即提示错误信息。但是在某些情况下,我们可能会希望在事务结束以后进行约束检查。如果要用此功能,我们必须在定义约束时,指定DEFERRABLE选项。示例如下:
deptno NUMBER(4) CONSTRAINT s_emp_fk REFERENCES s_dept(deptno) DEFERRABLE;
4. 显示约束信息
SELECT constraint_name, constraint_type,status,validate
FROM dba_constraints
WHERE owner=‘SCOTT’AND table_name=‘EMPLOYEE’;
显示约束列:
SELECT column_name FROM dba_cons_columns WHERE owner=’’SCOTT’ AND constraints_name=’CHECK_JOB’;