mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式
區(qū)別分析
1.key 是數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)
它包含兩層意義:
- 一是約束(偏重于約束和規(guī)范數(shù)據(jù)庫(kù)的結(jié)構(gòu)完整性)
- 二是索引(輔助查詢(xún)用的)。包括primary key, unique key, foreign key 等
primary key 有兩個(gè)作用,一是約束作用(constraint),用來(lái)規(guī)范一個(gè)存儲(chǔ)主鍵和唯一性,但同時(shí)也在此key上建立了一個(gè)index;
unique key 有兩個(gè)作用,一是約束作用(constraint),規(guī)范數(shù)據(jù)的唯一性,但同時(shí)也在這個(gè)key上建立了一個(gè)index;
foreign key 有兩個(gè)作用,一是約束作用(constraint),規(guī)范數(shù)據(jù)的引用完整性,但同時(shí)也在這個(gè)key上建立了一個(gè)index;
可見(jiàn),mysql的key是同時(shí)具有constraint和index的意義,這點(diǎn)和其他數(shù)據(jù)庫(kù)表現(xiàn)的可能有區(qū)別。(至少在Oracle上建立外鍵,不會(huì)自動(dòng)建立index),因此創(chuàng)建key也有如下幾種方式:
(1)在字段級(jí)以key方式建立, 如
create table t (id int not null primary key);
(2)在表級(jí)以constraint方式建立,如
create table t(id int, CONSTRAINT pk_t_id PRIMARY key (id));
(3)在表級(jí)以key方式建立,如
create table t(id int, primary key (id));
其它key創(chuàng)建類(lèi)似,但不管那種方式,既建立了constraint,又建立了index,只不過(guò)index使用的就是這個(gè)constraint或key。
2.index是數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)
它只是輔助查詢(xún)的,它創(chuàng)建時(shí)會(huì)在另外的表空間(mysql中的innodb表空間)以一個(gè)類(lèi)似目錄的結(jié)構(gòu)存儲(chǔ)。
索引要分類(lèi)的話,分為前綴索引、全文本索引等;
因此,索引只是索引,它不會(huì)去約束索引的字段的行為(那是key要做的事情)。
如:
create table t(id int, index inx_tx_id (id));
總結(jié):
1、我們說(shuō)索引分類(lèi),分為主鍵索引、唯一索引、普通索引(這才是純粹的index)等,也是基于是不是把index看作了key。比如:
create table t(id int, unique index inx_tx_id (id)); --index當(dāng)作了key使用
2、最重要的也就是,不管如何描述,理解index是純粹的index,還是被當(dāng)作key,當(dāng)作key時(shí)則會(huì)有兩種意義或起兩種作用。
創(chuàng)建索引
在執(zhí)行CREATE TABLE語(yǔ)句時(shí)可以創(chuàng)建索引,也可以單獨(dú)用CREATE INDEX或ALTER TABLE來(lái)為表增加索引。
1.ALTER TABLE
ALTER TABLE用來(lái)創(chuàng)建普通索引、UNIQUE索引或PRIMARY KEY索引。
ALTER TABLE table_name ADD INDEX index_name (column_list) ALTER TABLE table_name ADD UNIQUE (column_list) ALTER TABLE table_name ADD PRIMARY KEY (column_list)
其中table_name是要增加索引的表名,column_list指出對(duì)哪些列進(jìn)行索引,多列時(shí)各列之間用逗號(hào)分隔。
索引名index_name可選,缺省時(shí),MySQL將根據(jù)第一個(gè)索引列賦一個(gè)名稱(chēng)。
另外,ALTER TABLE允許在單個(gè)語(yǔ)句中更改多個(gè)表,因此可以在同時(shí)創(chuàng)建多個(gè)索引。
2.CREATE INDEX
CREATE INDEX可對(duì)表增加普通索引或UNIQUE索引。 CREATE INDEX index_name ON table_name (column_list) CREATE UNIQUE INDEX index_name ON table_name (column_list)
table_name、index_name和column_list具有與ALTER TABLE語(yǔ)句中相同的含義,索引名不可選。
另外,不能用CREATE INDEX語(yǔ)句創(chuàng)建PRIMARY KEY索引。
3.索引類(lèi)型
在創(chuàng)建索引時(shí),可以規(guī)定索引能否包含重復(fù)值。如果不包含,則索引應(yīng)該創(chuàng)建為PRIMARY KEY或UNIQUE索引。對(duì)于單列惟一性索引,這保證單列不包含重復(fù)的值。對(duì)于多列惟一性索引,保證多個(gè)值的組合不重復(fù)。
PRIMARY KEY索引和UNIQUE索引非常類(lèi)似。事實(shí)上,PRIMARY KEY索引僅是一個(gè)具有名稱(chēng)PRIMARY的UNIQUE索引。這表示一個(gè)表只能包含一個(gè)PRIMARY KEY,因?yàn)橐粋€(gè)表中不可能具有兩個(gè)同名的索引。
下面的SQL語(yǔ)句對(duì)students表在sid上添加PRIMARY KEY索引。
ALTER TABLE students ADD PRIMARY KEY (sid)
13.4.3 刪除索引
可利用ALTER TABLE或DROP INDEX語(yǔ)句來(lái)刪除索引。類(lèi)似于CREATE INDEX語(yǔ)句,DROP INDEX可以在ALTER TABLE內(nèi)部作為一條語(yǔ)句處理,語(yǔ)法如下。
DROP INDEX index_name ON talbe_name ALTER TABLE table_name DROP INDEX index_name ALTER TABLE table_name DROP PRIMARY KEY
其中,前兩條語(yǔ)句是等價(jià)的,刪除掉table_name中的索引index_name。
第3條語(yǔ)句只在刪除PRIMARY KEY索引時(shí)使用,因?yàn)橐粋€(gè)表只可能有一個(gè)PRIMARY KEY索引,因此不需要指定索引名。如果沒(méi)有創(chuàng)建PRIMARY KEY索引,但表具有一個(gè)或多個(gè)UNIQUE索引,則MySQL將刪除第一個(gè)UNIQUE索引。
如果從表中刪除了某列,則索引會(huì)受到影響。對(duì)于多列組合的索引,如果刪除其中的某列,則該列也會(huì)從索引中刪除。如果刪除組成索引的所有列,則整個(gè)索引將被刪除。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Windows中MySQL root用戶(hù)忘記密碼解決方案
在實(shí)際應(yīng)用中,經(jīng)常會(huì)出現(xiàn)忘記mysql管理員用戶(hù)root的密碼的情況出現(xiàn),那么我們?nèi)绾蝸?lái)設(shè)置一個(gè)新密碼從而登錄數(shù)據(jù)庫(kù)呢,下面我們來(lái)探討下2014-07-07
mysql如何將查詢(xún)結(jié)果內(nèi)容進(jìn)行轉(zhuǎn)換
文章介紹了如何在MySQL中使用CASE表達(dá)式對(duì)查詢(xún)結(jié)果進(jìn)行多分支判斷,并分享了個(gè)人經(jīng)驗(yàn),希望對(duì)大家有所幫助2025-02-02
新建一個(gè)MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單教程
這篇文章主要介紹了新建一個(gè)MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單教程,是MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
windows服務(wù)器下備份mysql數(shù)據(jù)庫(kù)的腳本分享
這篇文章主要為大家詳細(xì)介紹了windows服務(wù)器下備份mysql數(shù)據(jù)庫(kù)的腳本,本文主要以5.7版本為例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-12-12
mysql備份策略的實(shí)現(xiàn)(全量備份+增量備份)
最近項(xiàng)目需要對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行備份,通過(guò)查閱各種資料,設(shè)計(jì)了一套數(shù)據(jù)庫(kù)備份策略,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2021-07-07

