一、主鍵 索引 關係
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 關鍵字