日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql index sub part_mysql中的key和index 理解

發(fā)布時(shí)間:2025/3/8 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql index sub part_mysql中的key和index 理解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mysql的key和index多少有點(diǎn)令人迷惑,這實(shí)際上考察對(duì)數(shù)據(jù)庫體系結(jié)構(gòu)的了解的。

1 key 是數(shù)據(jù)庫的物理結(jié)構(gòu),它包含兩層意義,一是約束(偏重于約束和規(guī)范數(shù)據(jù)庫的結(jié)構(gòu)完整性),二是索引(輔助查詢用的)。包括primary key, unique key, foreign key 等。

primary key 有兩個(gè)作用,一是約束作用(constraint),用來規(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;

可見,mysql的key是同時(shí)具有constraint和index的意義,這點(diǎn)和其他數(shù)據(jù)庫表現(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)建類似,但不管那種方式,既建立了constraint,又建立了index,只不過index使用的就是這個(gè)constraint或key。

2 index是數(shù)據(jù)庫的物理結(jié)構(gòu),它只是輔助查詢的,它創(chuàng)建時(shí)會(huì)在另外的表空間(mysql中的innodb表空間)以一個(gè)類似目錄的結(jié)構(gòu)存儲(chǔ)。索引要分類的話,分為前綴索引、全文本索引等;

因此,索引只是索引,它不會(huì)去約束索引的字段的行為(那是key要做的事情)。

如,create table t(id int, index inx_tx_id? (id));

3 最后的釋疑:

(1)我們說索引分類,分為主鍵索引、唯一索引、普通索引(這才是純粹的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ì)有兩種意義或起兩種作用。

實(shí)踐結(jié)果:

新建一張User表,包含字段id, name。

(1)第一種情況:

mysql> create table user(id int, name varchar(50), age int, primary key(id));

Query OK, 0 rows affected (0.01 sec)

mysql> show create table user;

+-------+------------------------------------

------------------------------------------+

| Table | Create Table

|

+-------+------------------------------------

------------------------------------------+

| user ?| CREATE TABLE `user` (

`id` int(11) NOT NULL default '0',

`name` varchar(50) default NULL,

`age` int(11) default NULL,

PRIMARY KEY ?(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

mysql> show index

mysql> show keys

(2)第二種情況:

mysql> show create table user;

+-------+------------------------------

------------------------------+

| Table | Create Table

|

+-------+------------------------------

------------------------------+

| user ?| CREATE TABLE `user` (

`id` int(11) default NULL,

`name` varchar(50) default NULL,

`age` int(11) default NULL,

KEY `id` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

(3)第三種情況:

mysql> show create table user;

+-------+-----------------------------

------------------------------+

| Table | Create Table

|

+-------+-----------------------------

------------------------------+

| user ?| CREATE TABLE `user` (

`id` int(11) default NULL,

`name` varchar(50) default NULL,

`age` int(11) default NULL,

KEY `id` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk |

三、總結(jié)

(1)當(dāng)建表時(shí),建立primary key的鍵,同時(shí)默認(rèn)建立對(duì)應(yīng)的index

(2)當(dāng)建表時(shí),指定某列為key時(shí),那么同時(shí)為該鍵建立index,key和index對(duì)應(yīng)的鍵允許null

(3)當(dāng)建表時(shí),指定某列為index時(shí),那么同時(shí)為該鍵建立key,index和key對(duì)應(yīng)的鍵允許null。從建表語句中可以看出key ‘id’ (id),等價(jià)于(2)中的情況。

根據(jù)(1)(2)(3)說明在以上的使用情況中,index和key沒有什么區(qū)別。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的mysql index sub part_mysql中的key和index 理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。