|
3 约束
本章学习要求
创建主键约束与唯一约束
Enable、disable约束
外键约束注意事项
3.1 约束种类
Not null 非空约束
Primary key 主键约束
Foreign key 外键约束
Unique 唯一约束
Check 约束
3.2 管理约束相关语法
建表时指定约束,但不指定主键约束或唯一约束相关的索引参数
SQL> create table emp
2 (
3 empid number primary key ,
4 emp_name varchar2(40) unique,
5 deptno number,
6 salary number not null
7 )
8 tablespace ring;
表已创建。
SQL> column index_name format a20
SQL> select t.index_name,
2 t.index_type,
3 t.uniqueness,
4 t.tablespace_name
5 from user_indexes t
6 where t.table_name = 'EMP';
INDEX_NAME INDEX_TYPE UNIQUENES TABLESPACE_NAME
-------------------- ---------- --------- -----------------
SYS_C003728 NORMAL UNIQUE RING
SYS_C003729 NORMAL UNIQUE RING
SQL> select t.owner,
2 t.constraint_name,
3 t.constraint_type,
4 t.status,
5 t.validated
6 from user_constraints t where t.table_name = 'EMP';
OWNER CONSTRAINT_NAME C STATUS VALIDATED
---------- ------------------------- - -------- -------------
SCOTT SYS_C003727 C ENABLED VALIDATED
SCOTT SYS_C003728 P ENABLED VALIDATED
SCOTT SYS_C003729 U ENABLED VALIDATED
建表时指定唯一约束或主键约束关联的索引的属性
SQL> create table emp
2 (
3 empid number ,
4 emp_name varchar2(40),
5 deptno number,
6 salary number not null,
7 constraint pk_emp primary key(empid)
8 using index tablespace ringidx, –-指定表空间
9 constraint uk_emp unique(emp_name)
10 using index (create unique index uk_emp_name on emp(emp_name) tablespace ringidx )
11 )
12 tablespace ring;
表已创建。
SQL> select t.index_name,
2 t.index_type,
3 t.uniqueness,
4 t.tablespace_name
5 from user_indexes t
6 where t.table_name = 'EMP';
INDEX_NAME INDEX_TYPE UNIQUENES TABLESPACE_NAME
-------------------- ---------- --------- ------------------------------
PK_EMP NORMAL UNIQUE RINGIDX
UK_EMP_NAME NORMAL UNIQUE RINGIDX
SQL> select t.owner,
2 t.constraint_name,
3 t.constraint_type,
4 t.status,
5 t.validated
6 from user_constraints t where t.table_name = 'EMP';
OWNER CONSTRAINT_NAME C STATUS VALIDATED
---------- ------------------------- - -------- -------------
SCOTT SYS_C003748 C ENABLED VALIDATED
SCOTT PK_EMP P ENABLED VALIDATED
SCOTT UK_EMP U ENABLED VALIDATED
在命名约束时指定using index选项时,可以指定索引的名称,也可以不指定索引的名称,当不指定时索引名称时,索引名就与约束名相同。
建表后增加约束
SQL> alter table emp add constraint uk_emp_name unique
2 (
3 emp_name
4 )
5 using index tablespace ringidx;
表已更改。
删除唯一约束时保留索引
alter table emp drop constraint uk_emp_name keep index;
删除唯一约束时不保留索引
alter table emp drop constraint uk_emp_name keep index;
使约束失效
alter table emp disable constraint uk_emp_name;
启用约束
alter table emp enable constraint uk_emp_name;
启用约束时,oracle会对表中已存在数据进行有效性验证,若存在数据不满足约束条件时,会报错 |
|