1. 程式人生 > >Mysql(二)-索引、存儲引擎

Mysql(二)-索引、存儲引擎

索引、存儲引擎


##########################################################

Mysql索引:
類似於書的目錄
類型:
--》普通索引 index
--》唯一索引 unique
--》主鍵 primary key
-->外鍵 foreign key

優點:
提高查詢速度
缺點:
減緩寫入的速度

########################################################################################
一、普通索引:index
查看索引:
desc 庫名.表名;
show index from 庫名.表名;

默認使用的索引類型:
BTREE(二叉樹) hash B+Tree

創建索引:
--》建表時創建:
creat table 表名(
字段名 類型(寬度) 約束條件,
字段名 類型(寬度) 約束條件,
index(字段1),index(字段2)
);
create table t2 (
name char(10) not null,
index(name)
);

--》已有表添加索引:
create index 索引名 on 表名(字段名);
create index id on t1(id);

//註意:我們索引名與字段名可以不相同,但是為了方便辨認,我們一般將索引名與字段名設置相同。

刪除索引:
drop index 索引名 on 表名;

##########################################################################################3

二、主鍵:primary key

使用規則:
-->設置主鍵的字段的值,不能重復,且不能賦空值
--》一個表只能有一個主鍵
--》如果,多個字段都作為primary key,稱為復合主鍵,必須一起創建。
--》主鍵字段的key標誌為pri
--》通常與auto_increment(自動增長),一起連用。

創建主鍵:
--》建表時創建:
create table 表名(
字段名1 類型(寬度) 約束條件,
字段名2 類型(寬度) 約束條件,
primary key(字段名1,字段名2)
);
create table t4(
id int auto_increment, //設置自動增長(不賦值時,會根據上條記錄自動加1)
name char(10),
primary key(id,name) //設置復合主鍵
);

--》已有表創建:
alter table 表名 primary key(字段名);
alter table t1 primary key(id);

刪除主鍵:
alter table 表名 drop primary key;

##########################################################################################

三、唯一索引:unique

使用規則:
--》字段值可以為null,但不能重復
--》當將字段修改為null,限制與主鍵相同,
--》表中可以有多個unique字段

創建唯一索引:
--》建表時創建:
create table 表名(
字段名1 類型(寬度) 約束條件,
字段名2 類型(寬度) 約束條件,
unique(字段名1),
unique(字段名2)
);
create table t5(
id int,
name char(10),
unique(id),
unique(name)
);

--》已有表創建:
create unique index 索引名 on 表名(字段名);

刪除唯一索引:
drop index 索引名 on 表名;

#############################################################################################

四、外鍵:foreign key
外鍵:
讓當前表字段的值在另一個表中字段值的範圍內選擇。

使用規則:
--》表的存儲引擎必須是innodb
--》字段類型要一致
--》被參照字段必須要是索引類型的一種

創建外鍵:

命令:foreign key(字段名) references 表名(字段名)
on update cascade on delete cascade

create table jfb(
id int auto_increment,
name char(10),
pay float(7,2),
primary key(id),
);

create table xsb(
num int,
name char(10),
class char(10),
foreign key(num) references key(id) on update cascade on delete cascade
);

//創建jfb表,創建xsb表。xsb的num需要參考jfb中的id字段。即將num設為外鍵,將jfb中的id設為參考鍵。並設置自動更新。

insert into jfb values(1,"bob",20000),(2,"lucy",19000);

insert into xsb values(3,"jim","1709"); //無法插入,因為num的值,不在jfb的id值範圍內。
insert into xsb values(1,"jim","1709"; //插入成功

update jfb set id=6 where name=“bob”
select * from xsb; //更新jfb中的id字段數據,查看xsb中的記錄,也同時更新

delete from jfb where name=“bob”;
selece * from xsb; //刪除jfb表中記錄,xsb中的記錄也隨之刪除。

查看外鍵:
show create table 表名; //可以查看外鍵信息,包含外鍵名

刪除外鍵:
alter table 表名 drop foreign key 外鍵名;

##############################################################################################


mysql存儲引擎:

一、介紹:
mysql數據庫服務軟件自帶的程序,不同的存儲引擎有不同的功能和數據存儲方式,是表的處理器。

mysql服務體系結構:
連接池
sql接口
分析器
優化器
查詢緩存
存儲引擎
文件系統
管理工具

########################################################################################

二、基本設置、
查看數據庫服務使用的存儲引擎:
show engines;
查看表使用的存儲引擎:
show create table 表名;

設置數據庫服務使用的存儲引擎:
vim /etc/my.cnf
[mysql]
default-storage-engine=引擎類型
設置表的存儲引擎:
create table 表名(。。。。); //使用默認引擎
create table 表名(。。。。)engine=innodb; //設置存儲引擎為innodb

修改表使用的存儲引擎:
alter table 表名 engine=存儲引擎類型;

################################################################################3

三、常用引擎的特點:
myisam特點:
表.MYI 索引信息
表.MYD 數據
表.frm 表結構
支持表級鎖 (鎖一張表)
不支持事務 事務回滾

innodb特點:
表.frm 表結構
表.ibd 索引信息+數據
支持行級鎖 (只給當前被訪問的行加鎖)
支持事務 事務回滾


鎖的作用:解決並發訪問沖突問題。

鎖類型 :讀鎖 和 寫鎖


鎖粒度 : 行級鎖 表級鎖


事務: 一次數據訪問從開始到結束的過程 稱為事務
事務回滾: 一次數據訪問 任意一步執行失敗,恢復所有操作。
事務的特性: 一致性 原子性 隔離性

事務日誌文件:記錄對innodb存儲引擎的表執行過的操作。

工作如何如何決定表使用的存儲引擎:
接收寫操作多的表適合使用innodb存儲引擎。
接收讀操作多的表適合使用myisam存儲引擎



Mysql(二)-索引、存儲引擎