主鍵和唯一索引的有什么區別

主鍵和唯一索引的區別

—?區別

主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。
主鍵創建后一定包含一個唯一性索引,唯一性索引并不一定就是主鍵。
唯一性索引列允許空值,而主鍵列不允許為空值。
主鍵列在創建時,已經默認為空值 + 唯一索引了。
主鍵可以被其他表引用為外鍵,而唯一索引不能。
一個表最多只能創建一個主鍵,但可以創建多個唯一索引。
主鍵更適合那些不容易更改的唯一標識,如自動遞增列、身份證號等。
在 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')

主鍵和唯一索引的有什么區別

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享