目录
4、Guidelines for Constraints 约束准则
Maintaining Data Integrity 维护数据完整性
目标:
- 实现数据完整性约束
- 维护完整性约束
- 获取约束信息
以下是最佳切换步骤(unique约束会让这四种状态切换存在问题,切换前要先变成nounique状态):
完整性约束的有效使用:一个程序
按照以下顺序使用完整性约束状态可以确保获得最佳收益:
- 1.禁用状态。
- 2.执行操作(加载、导出、导入)。
- 3.启用novalidate状态。
- 4.启用状态。
按此顺序使用约束的一些好处是:
- 没有锁。
- 所有约束都可以同时进入启用状态。
- 约束启用是并行完成的。
- 允许在表上进行并发活动
- ALTER TABLE hr.departments
- ENABLE NOVALIDATE CONSTRAINT dept_pk;
这里以check约束为例
- CREATE TABLE <表名>
- ( <列名> <数据类型> [DEFAULT <默认值>] [NOT NULL | NULL]
- [CONSTRAINT <约束名>] 约束方式 /*定义为列的约束*/
- [,…n]
- [CONSTRAINT <约束名>] 约束方式 /*定义为表的约束*/
- )
例如:创建一个表demo,并且为该表的属性score创建一个check约束条件。
create table demo( sid VARCHAR(20) NOT NULL , sname VARCHAR(20) NOT NULL, profession VARCHAR(20) NOT NULL, score NUMBER(4) check(score>60 and score<80) NOT NULL );
- ALTER TABLE <表名>
- ADD CONSTRAINT <约束名> <约束种类>
- ALTER TABLE <表名>
- DROP CONSTRAINT <约束名称>
- 列级定义是在定义列的同时定义约束。
- 特别注意:not null只能在列级定义,不可在表级定义中出现。
示例:
- create table temp1
- ( id number primary key,
- name varchar2(32) not null
- );
- 表级定义是在定义了所有列后,再定义约束。
- 基本语法:
- create table 表名(字段名 字段类型,...,constraint 约束名称 约束条件(字段),约束条件(字段2),..);
示例:
- create table temp2
- ( id number,
- name varchar(32),
- constraint pr_id primary key(id), unique(name)
- );
语法:
constraint 约束名称 primary key(字段..)
constraint 约束名称 foreign key(字段) references 主表(字段)
constraint 约束名称 unique(字段)
constraint 约束名称 check(字段条件)
一般情况下,使用列级定义即可。但是如果遇到定义复合主键(两列一起被定义为主键)时,需要用到表级定义。
举例,将id与name定义为复合主键:
create table temp3 (id number, name varchar2(64), nums number, constraint pk_id_name primary key(id,name) );