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

區別:1、主鍵是一種約束,唯一索引是一種索引。2、主鍵創建后一定包含一個唯一性索引,唯一性索引并不一定就是主鍵。3、唯一性索引列允許空值,而主鍵列不允許為空值。4、主鍵可以被其他表引用為外鍵,而唯一索引不能。

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

本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。

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

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

  • 主鍵創建后一定包含一個唯一性索引,唯一性索引并不一定就是主鍵。

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

  • 主鍵列在創建時,已經默認為空值 + 唯一索引了。

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

  • 一個表最多只能創建一個主鍵,但可以創建多個唯一索引。

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

  • 在 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
喜歡就支持一下吧
點贊12 分享