51Testing软件测试论坛

标题: 自己的东东1 [打印本页]

作者: hhui623    时间: 2010-4-26 18:55
标题: 自己的东东1
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会对表中已存在数据进行有效性验证,若存在数据不满足约束条件时,会报错
作者: hhui623    时间: 2010-4-26 19:03
        建表时指定约束,但不指定主键约束或唯一约束相关的索引参数
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会对表中已存在数据进行有效性验证,若存在数据不满足约束条件时,会报错




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2