史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置

什么是存储引擎?

与其余数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不一样的是,MySQL有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎。用户能够根据不一样的需求为数据表选择不一样的存储引擎,用户也能够根据本身的须要编写本身的存储引擎。MySQL数据库在实际的工做中其实分为了语句分析层和存储引擎层,其中语句分析层就主要负责与客户端完成链接而且事先分析出SQL语句的内容和功能,而存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操做。简而言之,就是如何存储数据、如何为存储的数据创建索引和如何更新、查询数据等技术的实现方法。由于在关系数据库中数据的存储是以表的形式存储的,因此存储引擎也能够称为表类型(即存储和操做此表的类型)。mysql

MySQL存储引擎种类

存储引擎 说明
MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务
InnoDB 5.5版本后MySQL的默认数据库,支持事务和行级锁定,比MyISAM处理速度稍慢
ISAM MyISAM的前身,MySQL5.0之后再也不默认安装
MRG_MyISAM(MERGE) 将多个表联合成一个表使用,在超大规模数据存储时颇有用
Memory 内存存储引擎,拥有极高的插入,更新和查询效率。可是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失
Falcon 一种新的存储引擎,支持事物处理,传言多是InnoDB的替代者
Archive 将数据压缩后进行存储,很是适合存储大量的独立的,做为历史记录的数据,可是只能进行插入和查询操做
CSV CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换)

接下来咱们就介绍两种在实际开发中使用最多的两种引擎【MyISAM】和【InnoDB】。web

MyISAM 引擎

这种引擎是MySQL最先提供的。这种引擎又能够分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:sql

  • 静态MyISAM:若是数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。由于数据表中每一条记录所占用的空间都是同样的,因此这种表存取和更新的效率很是高。当数据受损时,恢复工做也比较容易作。
  • 动态MyISAM:若是数据表中出现varchar、xxxtext或xxxBLOB字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但因为每条记录的长度不一,因此屡次修改数据后,数据表中的数据就可能离散的存储在内存中,进而致使执行效率降低。同时,内存中也可能会出现不少碎片。所以,这种类型的表要常常用optimize table 命令或优化工具来进行碎片整理。
  • 压缩MyISAM:以上说到的两种类型的表均可以用myisamchk工具压缩。这种类型的表进一步减少了占用的存储,可是这种表压缩以后不能再被修改。另外,由于是压缩数据,因此这种表在读取的时候要先时行解压缩。

固然不论是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在如下几种状况下使用:数据库

  • 选择密集型的表。MyISAM存储引擎在筛选大量数据时很是迅速,这是它最突出的优势。
  • 插入密集型的表。MyISAM的并发插入特性容许同时选择和插入数据。

MyISAM表是独立于操做系统的,这说明能够轻松地将其从Windows服务器移植到Linux服务器;每当咱们创建一个MyISAM引擎的表时,就会在本地磁盘上创建三个文件,文件名就是表名。 例如我建立了一个【test】表,那么就会生成如下三个文件:服务器

文件名 说明
test.frm 存储表定义
test.MYD 存储数据
test.MYI 存储索引

InnoDB引擎

InnoDB表类型能够看做是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。InnoDB的表须要更多的内存和存储,它会在主内存中创建其专用的缓冲池用于高速缓冲数据和索引。
使用InnoDB是最理想的选择:架构

  • 更新密集的表:InnoDB存储引擎特别适合处理多重并发的更新请求。
  • 事务:InnoDB存储引擎是支持事务的标准MySQL存储引擎。
  • 自动灾难恢复:与其它存储引擎不一样,InnoDB表可以自动从灾难中恢复。
  • 外键约束:MySQL支持外键的存储引擎只有InnoDB。
  • 支持自动增长列AUTO_INCREMENT属性。

存储引擎操做

查看存储引擎

想要查看咱们的数据表使用了什么存储引擎,咱们就须要使用到咱们之前已经介绍过的【show】命令,语法以下:并发

SHOW CREATE TABLE 表名;

例如咱们查看咱们以前建立好的【user】表:svg

SHOW CREATE TABLE user;
+——-+—————————————————————————————————————————————————————————————————————————-+
| Table | Create Table |
+——-+—————————————————————————————————————————————————————————————————————————-+
| user | CREATE TABLE user (
userId char(5) CHARACTER SET latin1 NOT NULL,
name varchar(30) DEFAULT NULL,
sex char(1) CHARACTER SET latin1 DEFAULT ‘0’,
PRIMARY KEY (userId)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+——-+—————————————————————————————————————————————————————————————————————————-+
1 row in set (0.02 sec)工具

就能够看到【 ENGINE】显示咱们使用的引擎为【MyISAM】优化

存储引擎的变动

变动咱们存储表的存储引擎将使用到的是咱们前面使用过的【ALTER】命令,语法以下:

ALTER TABLE 表名 ENGINE=新引擎;

例如,咱们将【user】表的引擎更改成【InnoDB】:

mysql> ALTER TABLE user ENGINE = InnoDB;
Query OK, 7 rows affected (0.50 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE user;
+——-+—————————————————————————————————————————————————————————————————————————-+
| Table | Create Table |
+——-+—————————————————————————————————————————————————————————————————————————-+
| user | CREATE TABLE user (
userId char(5) CHARACTER SET latin1 NOT NULL,
name varchar(30) DEFAULT NULL,
sex char(1) CHARACTER SET latin1 DEFAULT ‘0’,
PRIMARY KEY (userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+——-+—————————————————————————————————————————————————————————————————————————-+
1 row in set (0.00 sec)

咱们就成功的将【user】表的存储引擎改成了【InnoDB】

修改默认引擎

要使用事务功能,就必须将表设置为InnoDB引擎,有的版本在安装时,是未激活InnoDB引擎的,因此须要咱们手动进行激活。首先咱们进入MySQL的安装目录,找到my.ini文件。例如,博主使用的是WampServer的集成开发环境,目录以下:
这里写图片描述
咱们右键选择记事本打开后,找到【default-storage-engine】这一行,如图:
这里写图片描述
将其修改成【default-storage-engine=InnoDB】便可,咱们就成功的将默认的引擎修改成【InnoDB】。

这里,咱们就讲解完了关于MySQL数据库存储引擎的有关知识,同时也为咱们下一步讲解史上最简单MySQL教程详解(进阶篇)之事务处理作好了铺垫,由于要实现事务管理,须要将表的存储引擎更改成【InnoDB】

相关文章
相关标签/搜索