oracle主键与索引,oracle 主键 \索引
在oracle中,我們創建一個主鍵,則同時自動創建了一個同名的唯一索引;刪除主鍵,則主鍵約束和對應的唯一索引都刪除了。這是我們經常見到的現象。
發出一個創建主鍵的sql,oracle其實執行了兩步:創建主鍵約束、創建/關聯 唯一索引。步驟是這樣的:
創建主鍵約束時,檢查該主鍵字段上是否已經存在唯一索引。若不存在,則自動創建同名唯一索引;若存在,則直接創建主鍵約束,并將該約束和已經存在的唯一索引對應上。
刪除主鍵約束時,可以決定是否保留對應的索引;刪除唯一索引時,若存在對應的主鍵約束,則不能刪除。
總之,存在主鍵約束,則肯定存在與之對應的唯一索引,而存在唯一索引,不一定對應著有主鍵約束。
下面我們驗證一下:
SQL> create table test_pri(a number(1), b number(1));
表已創建。
--1.創建主鍵,則自動創建同名唯一索引
--1.1創建主鍵,主鍵約束和唯一索引同時創建
SQL> alter table test_pri add constraint pk_test_pri_a primary key(a);
表已更改。
SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
2? from user_constraints where table_name = 'TEST_PRI';
CONSTRAINT_NAME?? TABLE_NAME?? INDEX_NAME
----------------- ------------ -------------
PK_TEST_PRI_A???? TEST_PRI???? PK_TEST_PRI_A
SQL> select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS
2? from user_indexes where table_name = 'TEST_PRI';
INDEX_NAME?????? INDEX_TYPE?? TABLE_NAME?? UNIQUENES
---------------- ------------ ------------ ---------
PK_TEST_PRI_A??? NORMAL?????? TEST_PRI???? UNIQUE
--1.2 刪除主鍵,主鍵約束和對應的唯一索引都刪除了
SQL> alter table test_pri drop constraint pk_test_pri_a;
表已更改。
SQL> select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME
2? from user_constraints where table_name = 'TEST_PRI';
未選定行
SQL> select INDEX_NAME, INDEX_TYPE, TAB
總結
以上是生活随笔為你收集整理的oracle主键与索引,oracle 主键 \索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle索引失效解决,Oracle索
- 下一篇: mtk camera faq