01_含义
MySQL中的存储引擎就像是现实中的银行
,不同的银行提供的安全级别/服务水平/存储功能都是不一样的
02_分类
MySQL中有三种存储引擎,分别是:
-
InnoDB(默认): 安全性高,支持事务和外键(
适合对安全性,数据完整性要求较高的应用
) -
MyISAM: 安全性低,不支持事务和外键(
适合频繁插入和查询的应用
) -
Memory: 访问速度极快,但不会永久存储数据(适合对读写速度要求较高的应用)
03_存储引擎的本质
-
数据库的本质就是文件
-
如果创建一个数据库,那么就会在数据库的安装目录下的Data文件夹下自动创建一个文件夹
-
如果创建一个表,那么就会在数据库文件夹里自动创建一个文件
-
创建表的时候就自动创建的文件中就保存了表的结构
04_不同存储引擎的功能
-
InnoDB
- 如果表的存储引擎是InnoDB, 那么只要创建表就会自动创建一个文件, 这个文件就保存了这张表的结构
- 如果往InnoDB的表中存储数据, 那么数据会被存储到ibdata1的文件中, 如果存储的数据比较多, 那么系统会自动再创建ibdata2, ibdata3文件
-
MyISAM
- 如果表的存储引擎是MyISAM, 那么只要创建表就会自动创建三个文件
- .sdi这个文件就保存了这张表的结构
- .MYD这个文件就保存了这张表中存储的数据
- .MYI这个文件就保存了这张表中的索引
-
Memory
- 如果表的存储引擎是Memory, 那么只要创建表就会自动创建一个文件, 这个文件就保存了这张表的结构
- 注意点: 如果表的存储引擎是Memory, 那么就不会像InnoDB/MyISAM将数据保存到文件中了, 而是直接保存到
内存
中
05_修改存储引擎
alter table 表名 engine=引擎名称;
06_示范
首先我们先创建一个sandy的数据库
create database sandy;
创建完成之后MySQL的安装目录下的Data目录下就会多出一个sandy的文件夹
接下来我们进入sandy数据库,然后创建一张person表
create table person(
id int,
name varchar(20)
);
默认存储引擎是InnoDB
可以验证一下
先删除person表
drop table person;
然后创建person表写上存储引擎为InnoDB
看看两者结果是否一样
create table person(
id int,
name varchar(20)
)engine=InnoDB;
结论显而易见默认存储引擎就是InnoDB
然后我们把person表删掉来看一下MyISAM
drop table person;
create table person(
id int,
name varchar(20)
)engine=MyISAM;
然后我们把person表删掉来看一下Memory
drop table person;
create table person(
id int,
name varchar(20)
)engine=Memory;
最后来试试把person表的存储引擎改为MyISAM
alter table person engine=MyISAM;