欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的區(qū)別

 更新時間:2017年07月25日 08:42:32   作者:Ein Verne  
本文給大家分享的是mysql索引中的KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的區(qū)別,即主鍵索引,唯一索引和普通索引的區(qū)別,希望大家能夠喜歡

對于題目中提出的問題,可以拆分來一步步解決。在 MySQL 中 KEY 和 INDEX 是同義。那這個問題就可以簡化為 PRIMARY KEY,UNIQUE KEY 和 INDEX 的區(qū)別。而這三者也正好是索引的劃分,主鍵索引,唯一索引和普通索引(INDEX)。

使用 INDEX 來加速從數(shù)據(jù)庫中讀取數(shù)據(jù)。INDEX 通常加在那些 JOIN, WHERE,和 ORDER BY 子句的列上。

創(chuàng)建索引時,需要確保該索引是應(yīng)用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。 實(shí)際上,索引也是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄。

索引也有它的缺點(diǎn):雖然索引提高了查詢速度,卻會降低更新表的速度,如對表進(jìn)行INSERT、UPDATE和DELETE。因?yàn)楦卤頃r,MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件。

MySQL 中 KEY 與 INDEX 區(qū)別

KEY 通常是 INDEX 同義詞。如果關(guān)鍵字屬性 PRIMARY KEY 在列定義中已給定,則 PRIMARY KEY 也可以只指定為KEY。這么做的目的是與其它數(shù)據(jù)庫系統(tǒng)兼容。 PRIMARY KEY 是一個唯一 KEY,此時,所有的關(guān)鍵字列必須定義為NOT NULL。如果這些列沒有被明確地定義為NOT NULL,MySQL應(yīng)隱含地定義這些列。

KEY 即鍵值,是關(guān)系模型理論中的一部份,比如有主鍵(PRIMARY KEY),外鍵(Foreign KEY)等,用于數(shù)據(jù)完整性檢否與唯一性約束等。而 INDEX 則處于實(shí)現(xiàn)層面,比如可以對表個的任意列建立索引,那么當(dāng)建立索引的列處于SQL語句中的Where條件中時,就可以得到快速的數(shù)據(jù)定位,從而快速檢索。至于UNIQUE INDEX,則只是屬于INDEX中的一種而已,建立了UNIQUE INDEX表示此列數(shù)據(jù)不可重復(fù),猜想MySQL對UNIQUE INDEX類型的索引可以做進(jìn)一步特殊優(yōu)化吧。

于是,在設(shè)計(jì)表的時候,KEY只是要處于模型層面的,而當(dāng)需要進(jìn)行查詢優(yōu)化,則對相關(guān)列建立索引即可。

KEY

KEY 是數(shù)據(jù)庫的物理結(jié)構(gòu),包含兩層含義,一是約束,偏重于約束和規(guī)范數(shù)據(jù)庫的結(jié)構(gòu)完整性,二是索引,輔助查詢。
•primary key 有兩個作用,一是約束作用(constraint),用來規(guī)范一個存儲主鍵和唯一性,但同時也在此key上建立了一個index;
•unique key 也有兩個作用,一是約束作用(constraint),規(guī)范數(shù)據(jù)的唯一性,但同時也在這個key上建立了一個index;
•foreign key也有兩個作用,一是約束作用(constraint),規(guī)范數(shù)據(jù)的引用完整性,但同時也在這個key上建立了一個index;

可見,key是同時具有constraint和index的意義.

INDEX

INDEX 也是數(shù)據(jù)庫的物理結(jié)構(gòu),但他只有輔助查詢作用,它會在創(chuàng)建時占用另外的空間。索引分為前綴索引、全文索引等。索引只是索引,不會去約束索引字段的行為。

PRIMARY KEY 和 UNIQUE KEY 的區(qū)別

PRIMARY KEYs(主鍵) 和 UNIQUE KEYs(唯一鍵約束) 是類似的, PRIMARY KEY通常是一列,也有可能多列,通常由他來決定一行數(shù)據(jù)(row)。 一張表只能有一個 PRIMARY KEY,但可以有很多 UNIQUE KEY。 當(dāng)給一列設(shè)置為 UNIQUE KEY 之后,不能有兩行在該列上有相同的數(shù)據(jù)。 PRIMARY KEY 不允許有 NULL值,但是 UNIQUE KEY 可以。

修改表 `ALTER TABLE table_name ADD PRIMARY KEY(column_name, …)

總結(jié),相同點(diǎn):
•PRIMARY KEY 和 UNIQUE KEY 都是用來保證列上數(shù)據(jù)的為原型
•都可以在一列或者多列上加

差異點(diǎn):
•同一張表 PRIMARY KEY 只能有一個, UNIQUE KEY可以有多個

PRIMARY KEY 不能有空值, UNIQUE KEY 可以有。如果 PRIMARY KEY 的1個或多個列為NULL,在增加PRIMARY KEY時,列自動更改為 NOT NULL 。而UNIQUE KEY 對列沒有要求是通過參考索引實(shí)施的,如果插入的值均為NULL,則根據(jù)索引的原理,全NULL值不被記錄在索引上,所以插入全NULL值時,可以有重復(fù)的,而其他的則不能插入重復(fù)值。

alter table t add constraint uk_t_1 UNIQUE (a,b); insert into t (a ,b ) values (null,1); # 不能重復(fù) insert into t (a ,b ) values (null,null);#可以重復(fù)

在MySQL中,對于一個PRIMARY KEY的列,MySQL已經(jīng)自動對其建立了UNIQUE INDEX,無需重復(fù)再在上面建立索引了。

網(wǎng)上關(guān)于 PRIMARY KEY 和 UNIQUE INDEX 的一段解釋:

Note that “PRIMARY” is called PRIMARY KEY not INDEX.
KEY is something on the logical level, describes your table and database design (i.e. enforces referential integrity …)
INDEX is something on the physical level, helps improve access time for table operations.
Behind every PK there is (usually) UNIQUE INDEX created (automatically).

操作索引

建立索引會占用磁盤空間的索引文件。
CREATE INDEX IndexName ON mytable(username(length));

如果是 CHAR,VARCHAR 類型,length 可以小于字段實(shí)際長度;如果是 BLOB 和 TEXT類型,必須指定 length。

在創(chuàng)建表時創(chuàng)建索引:

CREATE TABLE mytable( 
 ID INT NOT NULL,  
 username VARCHAR(15) NOT NULL,
 INDEX [INDEXName] (username(length)) 
);

刪除索引


DROP INDEX [INDEXName] ON mytable;

相關(guān)文章

  • window下mysql 8.0.15 安裝配置方法圖文教程

    window下mysql 8.0.15 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了window下mysql 8.0.15 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 詳解MySQL主從復(fù)制及讀寫分離

    詳解MySQL主從復(fù)制及讀寫分離

    這篇文章主要介紹了詳解MySQL主從復(fù)制及讀寫分離,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)mysql的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • MySQL可視化工具Navicat的連接方法

    MySQL可視化工具Navicat的連接方法

    今天小編就為大家分享一篇關(guān)于MySQL可視化工具Navicat的連接方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Mysql主從延時圖解方法

    Mysql主從延時圖解方法

    我們知道,一個服務(wù)器開放N個鏈接給客戶端連接的,就會有大并發(fā)的更新操作,但是從服務(wù)器的里面讀取binlog線程得僅有一個,當(dāng)某個SQL在從服務(wù)器上執(zhí)行的時間稍長?或由某個SQL要鎖表就會導(dǎo)致主服務(wù)器的SQL大量積壓,未被同步到從服務(wù)器,就導(dǎo)致了主從不一致,也就是主從延遲
    2022-01-01
  • mysql利用覆蓋索引避免回表優(yōu)化查詢

    mysql利用覆蓋索引避免回表優(yōu)化查詢

    這篇文章主要給大家介紹了關(guān)于mysql如何利用覆蓋索引避免回表優(yōu)化查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL數(shù)據(jù)庫常用操作技巧總結(jié)

    MySQL數(shù)據(jù)庫常用操作技巧總結(jié)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫常用操作技巧,結(jié)合實(shí)例形式總結(jié)分析了mysql查詢、存儲過程、字符串截取、時間、排序等常用操作技巧,需要的朋友可以參考下
    2018-03-03
  • 手動配置phpmyadmin和mysql密碼的兩種方案

    手動配置phpmyadmin和mysql密碼的兩種方案

    這篇文章主要介紹了手動配置phpmyadmin和mysql密碼的兩種方案,需要的朋友可以參考下
    2014-03-03
  • MySQL百萬級數(shù)據(jù)分頁查詢優(yōu)化方案

    MySQL百萬級數(shù)據(jù)分頁查詢優(yōu)化方案

    在mysql中l(wèi)imit可以實(shí)現(xiàn)快速分頁,但是如果數(shù)據(jù)到了幾百萬時我們的limit必須優(yōu)化才能有效的合理的實(shí)現(xiàn)分頁了,否則可能卡死你的服務(wù)器哦。
    2017-11-11
  • 關(guān)于Mysql自增id的這些你可能還不知道

    關(guān)于Mysql自增id的這些你可能還不知道

    這篇文章主要給大家介紹了關(guān)于Mysql自增id的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • MySql查詢時間段的方法

    MySql查詢時間段的方法

    這篇文章主要介紹了MySql查詢時間段的方法,包括了傳統(tǒng)的針對時間字段的查詢方法與UNIX時間戳的查詢技巧,非常具有實(shí)用價值,需要的朋友可以參考下
    2014-12-12

最新評論