约束:就是防止将无效的数据录入到表中。
可以使用约束执行以下任务:
(1)在对表执行插入、更新或删除行操作时,对表中的数据强制执行规则。必须满足约束,操作才能成功
(2)防止在其他表对该表存在依赖性时将其删除
(3)为Oracle工具(例如Oracle Developer)提供规则
数据完整性约束类别
NOT NULL:指定该列不能包含空值(只能在字段级定义,在同一个表中可以定义多个NOT NULL约束。
UNIQUE:指明一个列或列组合中的值对于该表中的所有行来说必须是唯一的(可以在字段级也可在表级定义)
PRIMARY KEY:唯一标识表中的每一行
FOREIGH KEY:在列和被引用表的列之间建立并实施一个外键关系(在表级上定义的,也可在列级定义)
CHECK:指定条件必须为真(在CHECK约束的表达式中必须引用到表中的一个或多个字段,并且表达式的计算结果必须是一个布尔值 ;可以在表级或字段级定义 ;对同一个字段可以定义多个CHECK约束,同时也可以定义NOT NULL约束)
约束的创建
1.在创建表的同时创建约束
创建主键:
create table departments(
department_id number(4),
departmentt_name varchar2(30),
................ ...........,
CONSTRAINT dept_id pk PRIMARY KEY(department_id));
创建外键:
create table employees(
employee_id number(6),
last_name varchar2(25) not null,
.......... ............,
department_id number(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id);
2.在表创建之后创建约束
ADD CONSTRAINT emp_manager_fk
FOREIGN KEY(manager_id)
REFERENCES employees(employee_id);
* 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以再表级定义约束,但如果某个约束作用于多个字段,必须在表级定义约束(在表级定义CONSTRAINT只能写最后)。
* 在定义结束时可以通过CONSTRAINT关键字为约束名,如果没有指定,ORACLE将自动为约束建立默认的名称。
定义primary key约束(单个字段)
create table employees (empno number(5) primary key,...)
指定约束名
create table employees (empno number(5) constraint emp_pk primary key,...)
定义primary key约束(多个字段,在表级定义约束)
create table employees
(empno number(5),
deptno number(3) not null,
constraint emp_pk primary key(empno,deptno)
using index tablespace indx
storage (initial 64K
next 64K
)
)
ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束, 定义PRIMARY KEY约束时可以为它的索引 指定存储位置和存储参数
总结:
1.一个表中只能有一个PRIMARY KEY约束,但主键有两种,单一的和复合主键,可以设置为多个字段为主键,即复合主键。想设复合主键要先建立约束,外键可以有多个,但可以有多个UNIQUE约束。
2.将为PRIMARY KEY列自动创建UNIQUE索引
3.外键是在子表中定义的,而包含引用列的表示父表
4.所有约束都存储在数据字典中,可以通过查看USER_CONSTRAINTS(ALL/DBA)
>select CONSTRAINT_NAME,CONSTRAINT_TYPE,SEARCH_CONDITION from user_constraints where table_name='XXX';