与其余数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不一样的是,MySQL有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎。用户能够根据不一样的需求为数据表选择不一样的存储引擎,用户也能够根据本身的须要编写本身的存储引擎。MySQL数据库在实际的工做中其实分为了语句分析层和存储引擎层,其中语句分析层就主要负责与客户端完成链接而且事先分析出SQL语句的内容和功能,而存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操做。简而言之,就是如何存储数据、如何为存储的数据创建索引和如何更新、查询数据等技术的实现方法。由于在关系数据库中数据的存储是以表的形式存储的,因此存储引擎也能够称为表类型(即存储和操做此表的类型)。mysql
存储引擎 | 说明 |
---|---|
MyISAM | 高速引擎,拥有较高的插入,查询速度,但不支持事务 |
InnoDB | 5.5版本后MySQL的默认数据库,支持事务和行级锁定,比MyISAM处理速度稍慢 |
ISAM | MyISAM的前身,MySQL5.0之后再也不默认安装 |
MRG_MyISAM(MERGE) | 将多个表联合成一个表使用,在超大规模数据存储时颇有用 |
Memory | 内存存储引擎,拥有极高的插入,更新和查询效率。可是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失 |
Falcon | 一种新的存储引擎,支持事物处理,传言多是InnoDB的替代者 |
Archive | 将数据压缩后进行存储,很是适合存储大量的独立的,做为历史记录的数据,可是只能进行插入和查询操做 |
CSV | CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换) |
接下来咱们就介绍两种在实际开发中使用最多的两种引擎【MyISAM】和【InnoDB】。web
这种引擎是MySQL最先提供的。这种引擎又能够分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:sql
固然不论是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在如下几种状况下使用:数据库
MyISAM表是独立于操做系统的,这说明能够轻松地将其从Windows服务器移植到Linux服务器;每当咱们创建一个MyISAM引擎的表时,就会在本地磁盘上创建三个文件,文件名就是表名。 例如我建立了一个【test】表,那么就会生成如下三个文件:服务器
文件名 | 说明 |
---|---|
test.frm | 存储表定义 |
test.MYD | 存储数据 |
test.MYI | 存储索引 |
InnoDB表类型能够看做是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。InnoDB的表须要更多的内存和存储,它会在主内存中创建其专用的缓冲池用于高速缓冲数据和索引。
使用InnoDB是最理想的选择:架构
想要查看咱们的数据表使用了什么存储引擎,咱们就须要使用到咱们之前已经介绍过的【show】命令,语法以下:并发
SHOW CREATE TABLE 表名;
例如咱们查看咱们以前建立好的【user】表:svg
SHOW CREATE TABLE user;
+——-+—————————————————————————————————————————————————————————————————————————-+
| Table | Create Table |
+——-+—————————————————————————————————————————————————————————————————————————-+
| user | CREATE TABLEuser
(
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 TABLEuser
(
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】