建約束(Constraint)時隱式建立索引(Index)及先建立索引後建立約束的區別
關於USING INDEX
兩種情況:
1.對於建立約束時隱式建立的索引,在做刪除操作的時候: 9i~10g都會連帶刪除該索引
2.對於先建立索引,再建立約束(使用到此索引)這種情況:
9i版本:需要區分索引是否唯一:
如果索引是唯一的,則刪除約束的時候,會連帶刪除索引;如果非唯一的,則不會刪除索引。
10g版本:無論索引是否唯一,都只是刪除約束,索引不會刪除。
可以參考metalink文件:309821.1
主題: | Oracle 10G Does not Drop User Index Associated With Unique/Primary Key Constraints | |||
文件 ID: | 309821.1 | 型別: | PROBLEM | |
Modified Date: | 18-MAY-2007 | 狀態: | MODERATED |
The information in this document applies to:
Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 10.2.0.0
This problem can occur on any platform.
Symptoms
Drop constraint does not drop a associated index in 10G
Cause
In 10g, a change was made to an internal function "atbdui" to not to drop the user index when the constraint using the index is dropped.
In 9i, this behavior. is different the user index
gets dropped when the constraint is dropped.
Select index_name,generated from dba_indexes where index_name='< ;index_name >';
Generated column would show 'Y' If the index is system generated.If 'N' ,it is user generated.
Solution
This behaviour is because of the code changes made in 10G.
Use the workaround:
alter table < table > drop constraint < constraint > drop index;
Note
If the index is non unique, we can still use them for enforcing primary key constraints or unique constraints.
But dropping the constraint does not drop the non-unique index.
This behaviour is seen from 8174 to 10.2.0.0.
Sample Output
SQL> create table test( a number );
Table created.
SQL> create index ind on test ( a );
Index created.
SQL> alter table test add constraint c1_pk primary key(a) using index;
Table altered.
SQL> select index_name from user_indexes where table_name='TEST';
INDEX_NAME
------------------------------
IND
SQL> alter table test drop constraint c1_pk;
Table altered.
SQL> select index_name from user_indexes where table_name='TEST';
INDEX_NAME
------------------------------
IND
References
- Encountering ora-00955 when trying to create primary key on an imported table in 10g
Keywords
USING~INDEX;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-617710/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 約束CONSTRAINTAI
- SQL外來鍵約束的含義及建立SQL
- 主鍵約束、唯一約束和唯一索引索引
- 用函式索引構造特殊的約束函式索引
- [20231115]建立enable novalidate約束2.txt
- MySQL學習筆記——建立與約束MySql筆記
- Sqlserver中所有約束的型別,建立、修改與刪除SQLServer型別
- MySQL——約束(constraint)詳解MySqlAI
- 10、Oracle中的約 束constraintOracleAI
- Android開發 - 掌握ConstraintLayout(四)建立基本約束AndroidAI
- SQL Server 資料表程式碼建立約束SQLServer
- Oracle如何管理帶約束的B樹索引Oracle索引
- SQL Server實戰三:資料庫表完整性約束及索引、檢視的建立、編輯與刪除SQLServer資料庫索引
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- MySQL 的索引型別及如何建立維護MySql索引型別
- Hive建立索引Hive索引
- DocumentDB 建立索引索引
- MySQL建立表的時候建立聯合索引的方法MySql索引
- mysql建立字首索引MySql索引
- 在 SQL Server 中,建立表時可以直接為欄位新增唯一約束(UNIQUE)SQLServer
- MySQL如何建立一個好索引?建立索引的5條建議【宇哥帶你玩轉MySQL 索引篇(三)】MySql索引
- 約束
- 建立索引後,速度變快原因?以及索引失效總結索引
- Javaweb-約束-外來鍵約束JavaWeb
- 建立索引的優劣勢索引
- MySQL索引建立原則MySql索引
- Lucene建立索引流程索引
- postgresql怎麼建立索引SQL索引
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- 資料庫建表及索引規約資料庫索引
- mongo 建立使用者 建hash 分割槽 建索引Go索引
- 03約束
- MySQL 約束MySql
- SQL約束SQL
- python建立elasticsearch索引的探討PythonElasticsearch索引
- 如何清除建立失敗的索引索引
- Mysql索引的建立與刪除MySql索引
- 聯合索引和多個單列索引使用中的索引命中情況及索引建立原則索引
- 資料型別與約束資料型別