ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 主键被disable后相应索引的处理

主键被disable后相应索引的处理

原创 Linux操作系统 作者:lsq_008 时间:2008-10-17 13:46:43 0 删除 编辑

分2种情况进行测试:

1.创建表时直接创建的主键。建表语句如下:

CREATE TABLE EMP
       (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
        ENAME VARCHAR2(10),
        JOB VARCHAR2(9),
        MGR NUMBER(4),
        HIREDATE DATE,
        SAL NUMBER(7,2),
        COMM NUMBER(7,2),
        DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

SQL> l
  1* select table_owner,index_name,index_type,table_name from user_indexes where table_name='EMP'
SQL> /
 
TABLE_OWNER                    INDEX_NAME                     INDEX_TYPE                  TABLE_NAME
------------------------------ ------------------------------ --------------------------- ------------------------------
SCOTT                          IDX_JOB                        NORMAL                      EMP
SCOTT                          IDX_JOB_MGR                    NORMAL                      EMP
SCOTT                          IDX_MGR                        NORMAL                      EMP
SCOTT                          PK_EMP                         NORMAL                      EMP
 
SQL> select owner,constraint_name,constraint_type,table_name,status from user_constraints where table_name='EMP';
 
OWNER                          CONSTRAINT_NAME                C TABLE_NAME                     STATUS
------------------------------ ------------------------------ - ------------------------------ --------
SCOTT                          PK_EMP                         P EMP                            ENABLED
SCOTT                          FK_DEPTNO                      R EMP                            ENABLED
 
SQL> alter table emp modify constraint pk_emp disable;
 
Table altered.
 
SQL> select table_owner,index_name,index_type,table_name from user_indexes where table_name='EMP'
  2  ;
 
TABLE_OWNER                    INDEX_NAME                     INDEX_TYPE                  TABLE_NAME
------------------------------ ------------------------------ --------------------------- ------------------------------
SCOTT                          IDX_JOB                        NORMAL                      EMP
SCOTT                          IDX_JOB_MGR                    NORMAL                      EMP
SCOTT                          IDX_MGR                        NORMAL                      EMP
 
SQL>  select owner,constraint_name,constraint_type,table_name,status from user_constraints where table_name='EMP';
 
OWNER                          CONSTRAINT_NAME                C TABLE_NAME                     STATUS
------------------------------ ------------------------------ - ------------------------------ --------
SCOTT                          PK_EMP                         P EMP                            DISABLED
SCOTT                          FK_DEPTNO                      R EMP                            ENABLED

       从上述过程可以看出,这种情况下,将主键disable后,相应的索引也被删除。此时再将主键enable:

SQL> alter table emp modify constraint pk_emp enable;
 
Table altered.
 
SQL>  select owner,constraint_name,constraint_type,table_name,status from user_constraints where table_name='EMP';
 
OWNER                          CONSTRAINT_NAME                C TABLE_NAME                     STATUS
------------------------------ ------------------------------ - ------------------------------ --------
SCOTT                          PK_EMP                         P EMP                            ENABLED
SCOTT                          FK_DEPTNO                      R EMP                            ENABLED
 
SQL> select table_owner,index_name,index_type,table_name from user_indexes where table_name='EMP';
 
TABLE_OWNER                    INDEX_NAME                     INDEX_TYPE                  TABLE_NAME
------------------------------ ------------------------------ --------------------------- ------------------------------
SCOTT                          IDX_JOB                        NORMAL                      EMP
SCOTT                          IDX_JOB_MGR                    NORMAL                      EMP
SCOTT                          IDX_MGR                        NORMAL                      EMP
SCOTT                          PK_EMP                         NORMAL                      EMP

     可见,enable后,相应的索引被重新创建,如果设置10046跟踪事件,也可以从跟踪文件中看到索引被删除的过程。

2.如果创建主键时,已经创建了唯一索引,测试如下:

SQL> create unique index idx_test on test(empno);
 
Index created.
 
SQL> alter table test add constraint pk_test primary key(empno);
 
Table altered.
 
SQL> alter table test modify constraint pk_test disable;
 
Table altered.
 
SQL> select index_name,index_type,table_name from user_indexes where table_name='TEST';
 
no rows selected
 

这种情况下,如果禁用了主键约束,则相应的唯一索引仍然将被删除

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10972173/viewspace-471556/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 关于sga_max_size
请登录后发表评论 登录
全部评论
十余年大型金融及电信系统数据库管理经验,曾服务于中国建设银行、中国移动。对oracle,mysql数据库有深入了解。 擅长python开发,独立开发了开源数据库自动化监控运维平台Power Monitor。

注册时间:2008-02-29

  • 博文量
    335
  • 访问量
    1369112