51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1766|回复: 1
打印 上一主题 下一主题

[原创] 自己的东东1

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-4-26 18:55:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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会对表中已存在数据进行有效性验证,若存在数据不满足约束条件时,会报错
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2010-4-26 19:03:01 | 只看该作者
        建表时指定约束,但不指定主键约束或唯一约束相关的索引参数
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会对表中已存在数据进行有效性验证,若存在数据不满足约束条件时,会报错
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-8 18:50 , Processed in 0.065213 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表