Oracle刪除主鍵保留索引的方法
yangtingkun的"如何判斷索引是系統產生還是使用者建立的"http://yangtingkun.itpub.net/post/468/160390中說到:
對於主鍵和唯一約束,如果沒有事先建立索引的話,Oracle在建立的過程中會自動建立一個唯一索引。
同樣,Oracle在刪除主鍵和約束的時候也會自動刪除這個唯一索引
對於主鍵和唯一約束,如果沒有事先建立索引的話,Oracle在建立的過程中會自動建立一個唯一索引。
同樣,Oracle在刪除主鍵和約束的時候也會自動刪除這個唯一索引
今天正好有張大表要進行改名,按照要求,PK約束的名稱也需要跟著改變,但是Oracle好像不能夠對約束進行改名(可能我不知道,如果有人知道麻煩告訴我),只有刪除後再重新建立,但是重建的話,index也會跟著被重建。查了下Oracle文件,發現是可以做到刪除主鍵保留索引的。
create table t(id number(6));
alter table t add constraint pk_t primary key (id);
alter table t add constraint pk_t primary key (id);
SQL>
Table created
Table altered
SQL>
SQL> SELECT A.NAME, B.NAME,
2 DECODE(BITAND(C.PROPERTY, 4096), 4096, 'SYSTEM CREATED', 'MANU CREATED') INDEX_TYPE
3 FROM SYS.OBJ$ A, SYS.OBJ$ B, SYS.IND$ C
4 WHERE A.OBJ# = C.BO#
5 AND B.OBJ# = C.OBJ#
6 AND A.NAME ='T';
NAME NAME INDEX_TYPE
------------------------------ ------------------------------ --------------
T PK_T SYSTEM CREATED
SQL> alter table t drop primary key cascade keep index; -- 方法一
Table altered
SQL> select index_name from user_indexes where table_name='T';
INDEX_NAME
------------------------------
PK_T --刪除後索引還在
SQL>
SQL> SELECT A.NAME, B.NAME,
2 DECODE(BITAND(C.PROPERTY, 4096), 4096, 'SYSTEM CREATED', 'MANU CREATED') INDEX_TYPE
3 FROM SYS.OBJ$ A, SYS.OBJ$ B, SYS.IND$ C
4 WHERE A.OBJ# = C.BO#
5 AND B.OBJ# = C.OBJ#
6 AND A.NAME ='T';
NAME NAME INDEX_TYPE
------------------------------ ------------------------------ --------------
T PK_T SYSTEM CREATED
SQL> alter table t add constraint pk_t primary key (id);
Table altered
SQL>
SQL> SELECT A.NAME, B.NAME,
2 DECODE(BITAND(C.PROPERTY, 4096), 4096, 'SYSTEM CREATED', 'MANU CREATED') INDEX_TYPE
3 FROM SYS.OBJ$ A, SYS.OBJ$ B, SYS.IND$ C
4 WHERE A.OBJ# = C.BO#
5 AND B.OBJ# = C.OBJ#
6 AND A.NAME ='T';
NAME NAME INDEX_TYPE
------------------------------ ------------------------------ --------------
T PK_T SYSTEM CREATED
SQL> alter table t drop constraint pk_t cascade keep index; -- 方法二
Table altered
SQL> select index_name from user_indexes where table_name='T';
INDEX_NAME
------------------------------
PK_T
Table altered
SQL>
SQL> SELECT A.NAME, B.NAME,
2 DECODE(BITAND(C.PROPERTY, 4096), 4096, 'SYSTEM CREATED', 'MANU CREATED') INDEX_TYPE
3 FROM SYS.OBJ$ A, SYS.OBJ$ B, SYS.IND$ C
4 WHERE A.OBJ# = C.BO#
5 AND B.OBJ# = C.OBJ#
6 AND A.NAME ='T';
NAME NAME INDEX_TYPE
------------------------------ ------------------------------ --------------
T PK_T SYSTEM CREATED
SQL> alter table t drop constraint pk_t cascade keep index; -- 方法二
Table altered
SQL> select index_name from user_indexes where table_name='T';
INDEX_NAME
------------------------------
PK_T
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/195110/viewspace-678281/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql刪除主鍵索引,刪除索引語法MySql索引
- ORACLE 在缺少主鍵ID的情況下刪除重複資料,只保留一行Oracle
- MySQL 5.5 刪除索引的方法MySql索引
- ORACLE批量刪除無主鍵重複資料Oracle
- oracle主鍵序列的建立,刪除,修改序列起始值Oracle
- 解決資料庫的索引亂碼問題,先刪除外來鍵約束,再刪除主鍵約束及其索引資料庫索引
- 【PK】Oracle 10g刪除主鍵約束後無法刪除唯一約束索引問題的模擬與分析Oracle 10g索引
- excel一鍵去除公式保留文字 excel刪除公式保留運算數值Excel公式
- mysql-刪除和新增主鍵MySql
- 主鍵與主鍵索引的關係索引
- Oracle主鍵、唯一鍵與唯一索引的區別Oracle索引
- oracle 誤刪除的處理方法Oracle
- oracle新增主鍵的四種方法:Oracle
- 【Oracle】-【move】【索引】無資料的主鍵索引VALID還是UNUSABLEOracle索引
- 刪除DG歸檔保留5個
- oracle資料庫建立、刪除索引等操作Oracle資料庫索引
- oracle刪除重資料方法Oracle
- 主鍵、自增主鍵、主鍵索引、唯一索引概念區別與效能區別索引
- Mysql索引的建立與刪除MySql索引
- Oracle如何刪除表中重複記錄保留第一條Oracle
- MySQL建立索引、修改索引、刪除索引的命令語句MySql索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- 【Mongo】MongoDB索引管理-索引的建立、檢視、刪除MongoDB索引
- DataFrame刪除複合索引索引
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- 定時刪除歸檔(僅保留最近兩天的)
- 儲存系統實現-資料刪除之索引的刪除索引
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄) 轉Oracle
- 【轉】oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- Lucene中建立索引的效率和刪除索引的實現索引
- win10如何刪除hao123主頁 徹底刪除hao123主頁的方法Win10
- 刪除 oracleOracle
- 主鍵local索引、unique local索引、分割槽索引順序的理解索引
- oracle 刪除重複資料的幾種方法Oracle
- Oracle中大批量刪除資料的方法Oracle
- 刪除Oracle 10g垃圾表的好方法Oracle 10g