從Oracle9i開始,主鍵建立時的索引和唯一性限制式可以在建表時獨立定義。
隨後,約束可以被獨立drop,而索引可以保留。這是Oracle9i中對於索引增強幾個特性之一。
SQL> CREATE TABLE employees
2 (
3 empno NUMBER(6),
4 NAME VARCHAR2(30),
5 dept_no NUMBER(2),
6 CONSTRAINT emp_pk PRIMARY KEY(empno)
7 USING INDEX
8 (CREATE UNIQUE INDEX emp_pk_idx ON employees(empno))
9 );
Table created.
SQL> select index_name,UNIQUENESS from user_indexes
2 where table_name=upper('employees');
INDEX_NAME UNIQUENES
------------------------------ ---------
EMP_PK_IDX UNIQUE
SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,INDEX_NAME from user_constraints
2 where table_name=upper('employees');
CONSTRAINT_NAME C INDEX_NAME
------------------------------ - ------------------------------
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/
EMP_PK P EMP_PK_IDX
Oracle9i中新增的命令可以用以DROP約束保留索引.
ALTER TABLE employees DROP PRIMARY KEY KEEP INDEX;
SQL> ALTER TABLE employees DROP PRIMARY KEY KEEP INDEX;
Table altered.
SQL> select index_name,UNIQUENESS from user_indexes
2 where table_name=upper('employees');
INDEX_NAME UNIQUENES
------------------------------ ---------
EMP_PK_IDX UNIQUE
對於隱式建立的主鍵索引,同樣可以使用此種方式保留:
SQL> CREATE TABLE employees
2 (
3 empno NUMBER(6) primary key,
4 NAME VARCHAR2(30),
5 dept_no NUMBER(2)
6 );
Table created.
SQL> ALTER TABLE employees DROP PRIMARY KEY KEEP INDEX;
Table altered.
SQL> select index_name,UNIQUENESS from user_indexes
2 where table_name=upper('employees');
INDEX_NAME UNIQUENES
------------------------------ ---------
SYS_C004180 UNIQUE
作者:51cto部落格 Oracle小混子