oracle主键与索引,oracle 主键 \索引
在oracle中,我們創(chuàng)建一個(gè)主鍵,則同時(shí)自動(dòng)創(chuàng)建了一個(gè)同名的唯一索引;刪除主鍵,則主鍵約束和對(duì)應(yīng)的唯一索引都刪除了。這是我們經(jīng)常見(jiàn)到的現(xiàn)象。
發(fā)出一個(gè)創(chuàng)建主鍵的sql,oracle其實(shí)執(zhí)行了兩步:創(chuàng)建主鍵約束、創(chuàng)建/關(guān)聯(lián) 唯一索引。步驟是這樣的:
創(chuàng)建主鍵約束時(shí),檢查該主鍵字段上是否已經(jīng)存在唯一索引。若不存在,則自動(dòng)創(chuàng)建同名唯一索引;若存在,則直接創(chuàng)建主鍵約束,并將該約束和已經(jīng)存在的唯一索引對(duì)應(yīng)上。
刪除主鍵約束時(shí),可以決定是否保留對(duì)應(yīng)的索引;刪除唯一索引時(shí),若存在對(duì)應(yīng)的主鍵約束,則不能刪除。
總之,存在主鍵約束,則肯定存在與之對(duì)應(yīng)的唯一索引,而存在唯一索引,不一定對(duì)應(yīng)著有主鍵約束。
下面我們驗(yàn)證一下:
SQL> create table test_pri(a number(1), b number(1));
表已創(chuàng)建。
--1.創(chuàng)建主鍵,則自動(dòng)創(chuàng)建同名唯一索引
--1.1創(chuàng)建主鍵,主鍵約束和唯一索引同時(shí)創(chuàng)建
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 刪除主鍵,主鍵約束和對(duì)應(yīng)的唯一索引都刪除了
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
總結(jié)
以上是生活随笔為你收集整理的oracle主键与索引,oracle 主键 \索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle索引失效解决,Oracle索
- 下一篇: mtk camera faq