概念
開(kāi)始之前,先解釋一下約束和索引。
約束 全稱完整性約束,它是關(guān)系數(shù)據(jù)庫(kù)中的對(duì)象,用來(lái)存放插入到一個(gè)表中一列數(shù)據(jù)的規(guī)則,用來(lái)確保數(shù)據(jù)的準(zhǔn)確性和一致性。
索引 數(shù)據(jù)庫(kù)中用的最頻繁的操作是數(shù)據(jù)查詢,索引就是為了加速表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的數(shù)據(jù)結(jié)構(gòu)。可以把索引類比成書(shū)的目錄,有目錄的肯定比沒(méi)有目錄的書(shū),更方便查找。
唯一約束 保證在一個(gè)字段或者一組字段里的數(shù)據(jù)都與表中其它行的對(duì)應(yīng)數(shù)據(jù)不同。和主鍵約束不同,唯一約束允許為 NULL,只是只能有一行。
唯一索引 不允許具有索引值相同的行,從而禁止重復(fù)的索引或鍵值。
唯一約束和唯一索引都是為了保證表中被限制的字段不允許有重復(fù)的值,看起來(lái)功能是一樣的,那為什么要設(shè)計(jì)這樣兩種一樣的功能呢?
唯一約束和唯一索引在 MySQL 數(shù)據(jù)庫(kù)里區(qū)別:
1、概念上不同,約束是為了保證數(shù)據(jù)的完整性,索引是為了輔助查詢;
2、創(chuàng)建唯一約束時(shí),會(huì)自動(dòng)的創(chuàng)建唯一索引;
3、在理論上,不一樣,在實(shí)際使用時(shí),基本沒(méi)有區(qū)別。
關(guān)于第二條,MySQL 中唯一約束是通過(guò)唯一索引實(shí)現(xiàn)的,為了保證沒(méi)有重復(fù)值,在插入新記錄時(shí)會(huì)再檢索一遍,怎樣檢索快,當(dāng)然是建索引了,所以,在創(chuàng)建唯一約束的時(shí)候就創(chuàng)建了唯一索引。








暫無(wú)數(shù)據(jù)