约束:就是防止将无效的数据录入到表中。 可以使用约束执行以下任务: (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';
