建約束(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rhel4 mysql5.1 索引index_約束constraint建立_刪除_查詢MySql索引IndexAI
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- SQL外來鍵約束的含義及建立SQL
- 【INDEX】Oracle中主鍵、唯一約束與唯一索引之區別IndexOracle索引
- 約束CONSTRAINTAI
- constraint約束AI
- 用函式索引構造特殊的約束函式索引
- MySQL學習筆記——建立與約束MySql筆記
- Sqlserver中所有約束的型別,建立、修改與刪除SQLServer型別
- 解決資料庫的索引亂碼問題,先刪除外來鍵約束,再刪除主鍵約束及其索引資料庫索引
- SQL Server 資料表程式碼建立約束SQLServer
- MySQL中的 UNIQUE約束和UNIQUE索引MySql索引
- 唯一性約束和唯一性索引的區別索引
- Oracle如何管理帶約束的B樹索引Oracle索引
- 利用函式索引解決複雜的約束問題函式索引
- 資料完整性約束:主鍵、外來鍵、各種約束的建立刪除語句
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- SQL Server實戰三:資料庫表完整性約束及索引、檢視的建立、編輯與刪除SQLServer資料庫索引
- MySQL——約束(constraint)詳解MySqlAI
- 10、Oracle中的約 束constraintOracleAI
- 建立Oracle唯一約束,忽略已有的重複值Oracle
- SQL Server2008建立約束圖解SQLServer圖解
- zt_如何加速索引index建立索引Index
- Android開發 - 掌握ConstraintLayout(四)建立基本約束AndroidAI
- 查詢oracle表的資訊(表,欄位,約束,索引)Oracle索引
- SQL SERVER中找出拙劣的約束,索引,外來鍵SQLServer索引
- Oracle - 約束、索引等相關常用操作語句Oracle索引
- C# 泛型 引用型別約束 值型別約束C#泛型型別
- 加快建立索引(create / rebuild index) 的幾點索引RebuildIndex
- MySQL 的索引型別及如何建立維護MySql索引型別
- oracle 繁忙時候建立索引Oracle索引
- MySQL建立表的時候建立聯合索引的方法MySql索引
- Javaweb-約束-外來鍵約束JavaWeb
- 【PK】Oracle 10g刪除主鍵約束後無法刪除唯一約束索引問題的模擬與分析Oracle 10g索引
- ElasticSearch建立索引Elasticsearch索引
- DocumentDB 建立索引索引
- 在 SQL Server 中,建立表時可以直接為欄位新增唯一約束(UNIQUE)SQLServer
- Unique約束,Primary Key約束與索引的關係學習與測試_20091213.doc索引