重庆思庄Oracle、Redhat认证学习论坛

标题: 普通索引列和主健列一样导致的问题 [打印本页]

作者: 郑全    时间: 2013-2-22 15:23
标题: 普通索引列和主健列一样导致的问题
SQL> CREATE TABLE EMP AS SELECT * FROM employees;

SQL> desc emp;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPLOYEE_ID                                        NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 EMAIL                                     NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 HIRE_DATE                                 NOT NULL DATE
 JOB_ID                                    NOT NULL VARCHAR2(10)
 SALARY                                             NUMBER(8,2)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)
SQL> create index idx_emp_id on emp(employee_id,last_name,email);


SQL> alter table emp add constraint pk_emp_id_name_email primary key(employee_id,last_name,email);
重庆-郑全(24803366)  15:16:10


看到确实只有一个索引:
SQL> select index_name,uniqueness from user_indexes where table_name='EMP';

INDEX_NAME                     UNIQUENES
------------------------------ ---------
IDX_EMP_ID                     NONUNIQUE


马上删除索引,报错:
SQL> drop index IDX_EMP_ID;
drop index IDX_EMP_ID
           *
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key

索引和主健一样导致的问题

作者: 郑全    时间: 2013-2-22 15:26

看来主健后建把索引先占住了,先停约束,再删除索引

SQL> alter table emp disable constraint pk_emp_id_name_email;

Table altered.

SQL> drop index IDX_EMP_ID;

Index dropped.

SQL> alter table emp enable constraint pk_emp_id_name_email;

Table altered.

SQL> select index_name,uniqueness from user_indexes where table_name='EMP';

INDEX_NAME                     UNIQUENES
------------------------------ ---------
PK_EMP_ID_NAME_EMAIL           UNIQUE

 

主健对应的索引又回来了

 

SQL> create index idx_emp_id on emp(employee_id,last_name,email);

Index created.

SQL> select index_name,uniqueness from user_indexes where table_name='EMP';

INDEX_NAME                     UNIQUENES
------------------------------ ---------
IDX_EMP_ID                     NONUNIQUE
PK_EMP_ID_NAME_EMAIL           UNIQUE

现在是两个索引了

[此贴子已经被作者于2013-2-22 15:30:38编辑过]

作者: bikong123    时间: 2013-2-22 15:45
这个应该是很有价值的东西,同学们空了一定看看,同时也一定多多重视SQL的学习,因为确实很有用!





欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2