天天看點

mysql中的鍵和索引!

一、主鍵 索引 關系

1.主鍵:主鍵的唯一作用就是唯一辨別表中的某一行資料。分為單一主鍵和聯合主鍵:

單一主鍵:隻用一列就能唯一辨別一行。

聯合主鍵:當使用一列已經不能唯一标示一行的時候,就要采用多列唯一辨別一行,就是聯合主鍵。聯合主健多個字段不能同時相同

2.索引:索引的作用就是提高資料的檢索速度,分為單一索引和聯合索引:

單一索引:隻是用某一列資料作為索引,預設是index索引,這一列可以包含重複資料;如果某一列不存在重複資料最好設定成unique形式的索引,比index的索引速度更快,在text資料上要使用fulltext索引。

聯合索引:為了更進一步提高檢索速度,每次檢索都需要用多列同時進行時,就可以把這多列設為聯合索引,提高索引速度,根據多列是否唯一,也分為index索引和unique索引。

聯合索引的使用必須注意:不能垮字段使用,比如a b c聯合索引 隻有a|ab|abc 才能用上聯合索引字段。

3.主鍵一定是索引,但是索引不一定是主鍵。一個表隻能有一個主鍵或聯合主鍵,但是可以有多個索引。

主鍵字段必須不能為空,但是索引字段可以為空。

二、外鍵和主健的關系

1.外鍵就是讓表中字段的值在參照表中的字段中選擇的一種限制标示

2.建立外鍵的條件

被參照字段必須是主鍵

參照字段和被參照字段必須是相同的資料類型

表的儲存引擎必須是innodb

三、文法格式

1.建立主鍵的指令格式

1.1.在建立表時建立主健

create table 表名(字段清單,primary key(需要設定成主健的字段名) auto_increment); #auto_increment 是需要将主健字段設定成自動增長的關鍵字,如果主健不是整數類型或者不需要自動增長的時候不需要該關鍵字;當需要設定聯合主鍵時,多個需要設定成主健的字段名之間用逗号隔開,而且不能使用自動增長`

或者

create table 表名(主健字段 字段類型 primary key auto_increment,字段清單);#此方法在建立聯合主健時不可用

1.2.在已經建立好的表上建立主健(如果該表中已經存在資料,且資料違反了主鍵限制,則無法建立主健,需要解決資料沖突後再建立)

alter table 表名 add primary key(需要設定成主健的字段名) auto_increment;

2.建立外鍵的指令格式

2.1.在建立表時建立外鍵(滿足建立外鍵的條件下)

create table 表名(字段清單,foreign key(需要建立外鍵限制的字段) references 被參照表的表名(被參照表的被參照字段) on update cascade on delete cascade)engine=innodb;

如果外鍵需要具有唯一标示的時候還可以在外鍵上加上主健限制

2.2.在已經存在的表中建立外鍵

alter table 表名 add foreign key(字段名) references 參考表名(參考字段名) on update casecade on delete cascade) engine=innodb;

3.建立索引的指令格式

3.1.建立表的時候建立索引(索引可以有多個,在以下示例中添加的是兩個)

create table 表名(字段清單,index(已經存在字段名),index(已經存在的字段名));#如果是聯合索引的多個已經存在字段名用,隔開,記住不能跨字段設定聯合索引

預設的索引名和字段名相同

3.2.把已經存在的表中的字段設定為索引字段

create index 索引名稱 on 表名(字段名)

索引名可以自己命名 一般使用字段名作為索引名

4.建立唯一索引的指令格式和普通索引的格式相似隻需要保證字段記錄的唯一性就可以使用unique關鍵字

繼續閱讀