主鍵和索引的區別

2021-09-13 18:48:08 字數 1597 閱讀 6676

– 區別

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

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

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

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

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

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

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

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

– 建立一張僅包含主鍵的表

create table `student` (

`id` bigint(10) not null auto_increment comment '主鍵id',

`name` varchar(50) not null comment '姓名',

`score` double(11,8) not null default '0.00000000' comment '分數',

primary key (`id`),

un) engine=innodb auto_increment=7 default charset=utf8 comment='學生表';

– 建立一張包含主鍵和索引的表

create table `ssj_book_market_item_list` (

`id` bigint(10) not null auto_increment comment '主鍵id',

`item_id` varchar(50) not null comment '物品id',

`cat_id` varchar(10) not null default '6' comment '物品類目',

`score` double(11,8) not null default '0.00000000' comment '排序分值',

`publish` timestamp not null default current_timestamp comment '物品發布時間',

`endtime` timestamp null default null comment '物品下線時間',

`tag_id` varchar(200) default null comment 'tag_id用於區分物品的分類',

primary key (`id`),

unique key `idx_item_id` (`item_id`,`cat_id`) using btree

) engine=innodb auto_increment=134764 default charset=utf8 comment='候選集';

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

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

create unique index test_uniquekey on test (uniquekey);

主鍵和索引的區別

主鍵 primary key 來自msdn的描述 表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 pk 用於強制表的實體完整性。在建立或修改表時,您可以通過定義 primary key 約束來建立主鍵。乙個表只能有乙個 primary key 約束,並且 prima...

主鍵和索引的區別

1.主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵.所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,乙個表只能有乙個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行數 據更新 刪除的時 候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外來鍵構成參照完整性約束,防止...

主鍵和索引的區別

1.主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵.所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,乙個表只能有乙個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行數 據更新 刪除的時 候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外來鍵構成參照完整性約束,防止...