主鍵和唯一索引的區別

2021-07-23 15:00:17 字數 2136 閱讀 4365

主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。

區別

1. 主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。

2. 唯一性索引列允許空值,而主鍵列不允許為空值。

3. 主鍵列在建立時,已經預設為空值 + 唯一索引了。

4. 主鍵可以被其他表引用為外來鍵,而唯一索引不能。

5. 乙個表最多只能建立乙個主鍵,但可以建立多個唯一索引。

6. 主鍵更適合那些不容易更改的唯一標識,如自動遞增列、身份證號等。

7. 在 rbo 模式下,主鍵的執行計畫優先順序要高於唯一索引。 兩者可以提高查詢的速度。 

-- 建立一張僅包含主鍵和唯一索引的表

create table test

(primarykey varchar2(20),

uniquekey varchar2(20)

);

-- 分別建立主鍵和唯一索引,語法不同

alter table test add constraint test_primarykey primary key (primarykey);

create unique index test_uniquekey on test (uniquekey);

-- 在 user_indexes 中可以看到兩個索引名稱

select table_name,table_type,index_name,index_type,uniqueness 

from user_indexes

where table_name='test';

-- 在 user_ind_columns 中可以看到兩個索引欄位名稱

select table_name,index_name,column_name,column_position 

from user_ind_columns

where table_name='test';

-- 在 user_constraints 僅可以看到主鍵約束名稱

select table_name,constraint_name,constraint_type 

from user_constraints

where table_name='test';

-- 在 user_cons_columns 僅可以看到主鍵約束欄位名稱

select table_name,constraint_name,column_name,position from user_cons_columns 

where constraint_name in (select constraint_name

from user_constraints

where table_name='test');

-- 為唯一索引增加乙個非空約束

alter table test modify uniquekey not null;
-- 在 user_constraints 僅可以看到主鍵約束名稱和非空約束名稱

select table_name,constraint_name,constraint_type 

from user_constraints

where table_name='test'

-- 在 user_cons_columns 僅可以看到主鍵約束欄位名稱和非空約束欄位名稱

select table_name,constraint_name,column_name,position

from user_cons_columns

where constraint_name in (select constraint_name

from user_constraints

where table_name='test')

主鍵索引和唯一索引的區別

區別 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。唯一性索引列允許空值,而主鍵列不允許為空值。主鍵列在建立時,已經預設為空值 唯一索引了。主鍵可以被其他表引用為外來鍵,而唯一索引不能。乙個表最多只能建立乙個主鍵,但可以建立多...

主鍵和唯一索引的區別

區別 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。唯一性索引列允許空值,而主鍵列不允許為空值。主鍵列在建立時,已經預設為空值 唯一索引了。主鍵可以被其他表引用為外來鍵,而唯一索引不能。乙個表最多只能建立乙個主鍵,但可以建立多...

主鍵和唯一索引的區別

區別 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。唯一性索引列允許空值,而主鍵列不允許為空值。主鍵列在建立時,已經預設為空值 唯一索引了。主鍵可以被其他表引用為外來鍵,而唯一索引不能。乙個表最多只能建立乙個主鍵,但可以建立多...