分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/ ,如需转载,请注明出处,否则将追究法律责任。