MySQL-存储引擎

491 阅读3分钟

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;