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
- ORACLE批量刪除無主鍵重複資料Oracle
- oracle主鍵序列的建立,刪除,修改序列起始值Oracle
- 主鍵的建立、新增、刪除操作
- excel一鍵去除公式保留文字 excel刪除公式保留運算數值Excel公式
- mysql-刪除和新增主鍵MySql
- oracle資料庫建立、刪除索引等操作Oracle資料庫索引
- oracle刪除重資料方法Oracle
- Oracle如何刪除表中重複記錄保留第一條Oracle
- Mysql索引的建立與刪除MySql索引
- win10如何刪除hao123主頁 徹底刪除hao123主頁的方法Win10
- 淺談Oracle 主外來鍵刪除語法格式Oracle
- 【Mongo】MongoDB索引管理-索引的建立、檢視、刪除MongoDB索引
- DataFrame刪除複合索引索引
- oracle之 反向鍵索引Oracle索引
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- oracle刪除超過N天資料指令碼的方法Oracle指令碼
- oracle刪除日誌Oracle
- [20180329]刪除帶斜線的索引.txt索引
- oracle adg主庫通過rman無法刪除歸檔Oracle
- 主鍵索引存的是行嗎?❌索引
- elasticsearch(三)----索引建立與刪除Elasticsearch索引
- HugeGraph之索引重建和刪除索引
- win10怎麼刪除右鍵多餘選項 win10刪除右鍵多餘選項的方法Win10
- Oracle 刪除千萬級資料量時,可以考慮以下方法來提高刪除效率Oracle
- win10刪除系統保留分割槽如何操作_win10刪除系統保留分割槽怎麼處理Win10
- Kafka超過保留期限資料未刪除的問題Kafka
- win10如何徹底刪除hao123主頁 win10徹底刪除hao123主頁的方法Win10
- sql刪除重複記錄只保留一條SQL
- Oracle快速找回被刪除的表Oracle
- 指定刪除幾天前的索引資料索引
- MySQL新增列、刪除列,建立主鍵等常用操作總結MySql
- impdp導致主鍵索引的變化索引
- oracle rac 12徹底刪除,徹底刪除該死的racOracle
- 刪除oracle重複值Oracle
- Oracle 增加 修改 刪除 列Oracle