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