主鍵和唯一索引的區別

wzq609發表於2014-06-09

前言: 作為一個非開發出身的DBA剛開始對資料庫的主鍵、外來鍵等一系列的詞很是困惑,到後面對主鍵(primary key)和唯一索引(Unique Index)又迷糊了很久,後面終於陸續整理清楚了,總結和大家分享下;

 

一、相似之處

  • 建立主鍵的同時會建立一個唯一索引;

二、區別

  • 主鍵是一種約束,目的是對這個表的某一列進行限制;
  • 唯一索引是一種索引,索引是資料庫表的一個冗餘結構,目的是為了更好的查詢;
  • 主鍵列不允許為空值,而唯一性索引列允許空值;
  • 一個表最多隻能一個主鍵,但是可以包含多個唯一索引;

三、測試

測試步驟:

3.1 建立一個表

指令碼:create table john as select * from dba_objects where 1=0;(複製表的結構)

 

3.2 建立主鍵,檢查是否產生唯一索引和約束

指令碼:ALTER TABLE john ADD CONSTRAINT john_PrimaryKey PRIMARY KEY (object_id);   CREATE UNIQUE INDEX john_UniqueKey ON john  (owner);

 

查詢語句:

SELECT table_name,table_type,index_name,index_type,uniqueness

FROM DBA_INDEXES

WHERE TABLE_NAME='JOHN';

3.3 測試再建立唯一索引和主鍵

ALTER TABLE john ADD CONSTRAINT john_PrimaryKey_2 PRIMARY KEY (namespace); ---會報錯誤ORA-02260: 表只能具有一個主鍵

CREATE UNIQUE INDEX john_UniqueKey_2 ON john  (timestamp); -----可以建立

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技術部落格:ORACLE 獵人筆記               資料庫技術群:367875324 (請備註ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-1178618/,如需轉載,請註明出處,否則將追究法律責任。

相關文章