您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL 存储引擎概述

提供了独有的式存储引擎,常见存储引擎有 InnoDB、MyISAM、NDB、Memory、Archive、Federated、Maria 等等,并且不同的存储引擎有着完全不同的,建表的时候可以指定存储引擎的类型,若不指定存储引擎类型,8.0 认的存储引擎就是 InnoDB。

1. InnoDB 存储引擎

InnoDB 存储引擎最大的特点是事务,它主要应用于事务(OLTP)相关的数据存储。它的特点有行锁、外键,并且一般操作不会产生锁。InnoDB 存储引擎从 MySLQ 5.5.5 之后的版本都是其认的存储引擎。
InnoDB 有多版本并发控制,并且有 4  种隔离级别,这种隔离级别分别为 顺序读(SERIALIZABLE)、可重复读(REPEATABLE READ)、读已提交(READ COMMITTED)、读未提交(READ UNCOMMITTED)

下面通过建表 来新建 InnoDB 存储引擎类型的数据表:

CREATE TABLE `test` (
  `id` int() unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar() NOT NULL DEFAULT '',  `age` int() unsigned NOT NULL,
  `id_number` varchar() CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar() DEFAULT NULL,
  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8;

执行结果如下图 :

Tips:如上图所示, 其中 ENGINE=InnoDB 表示建表指定存储引擎类型为 InnoDB。

2. MyISAM 存储引擎

MyISAM 存储引擎是 5.5.8 版本以前认使用的存储引擎,其事务,MyISAM 存储引擎表由 MYD 和 MYI 组成,其中 MYD 用来存放数据的,MYI 用来存放索引的。

下面通过建表 来新建 MyISAM 存储引擎类型的数据表:

CREATE TABLE `test_my` (
  `id` int() unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar() NOT NULL DEFAULT '',  `age` int() unsigned NOT NULL,
  `id_number` varchar() CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar() DEFAULT NULL,
  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT= DEFAULT CHARSET=utf8;

执行结果如下图 :

Tips:注意:对于 MyISAM 存储引擎, 只缓存索引,的数据由操作系统完成。

3. NDB 存储引擎

NDB 存储引擎是集群存储引擎,其特点是数据全都存放在内存中(可以将非索引的数据放在磁盘上),通过主键查找的速度非常快, NDB 存储引擎的表连接操作(JOIN) 是由 Server 层完成的,其执行速度比较慢。因 NDB 是集群存储引擎,这里不方便做演示了。

4. MEMORY 存储引擎

Memory 存储引擎将表中的数据存放在内存中,如果发生 崩溃(crash)或者重启,则表中的数据会丢失。

下面通过建表 来新建 MyISAM 存储引擎类型的数据表:

CREATE TABLE `test_memory` (
  `id` int() unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar() NOT NULL DEFAULT '',  `age` int() unsigned NOT NULL,
  `id_number` varchar() CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar() DEFAULT NULL,
  PRIMARY KEY (`id`)) ENGINE=MEMORY AUTO_INCREMENT= DEFAULT CHARSET=utf8;

执行结果如下图 :

5. ARCHIVE 存储引擎

ARCHIVE 存储引擎只 INSERT插入和 SELECT 操作,这就意味着插入进去的数据不能更改,所以 ARCHIVE 存储引擎非常适合存储归档数据。
下面通过建表 来新建 ARCHIVE 存储引擎类型的数据表:

CREATE TABLE `test_archive` (
  `id` int() unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar() NOT NULL DEFAULT '',  `age` int() unsigned NOT NULL,
  `id_number` varchar() CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar() DEFAULT NULL,
  PRIMARY KEY (`id`)) ENGINE=ARCHIVE AUTO_INCREMENT= DEFAULT CHARSET=utf8;

执行结果如下图 :

Tips:注意:ARCHIVE 存储引擎使用行锁来实现高并发的写入操作,但其本身不是 crash safe 的存储引擎。

6. FEDERATED 存储引擎

FEDERATED 存储引擎不存放数据,它指向远程 。本地只存放表的机构信息,数据都通过远程连接存放到远程服务器,增删改查操作都是通过建立的连接来访问远程进行操作,把结果返回给本地。FEDERATED 存储引擎认是不开启的,可以先查看所有存储引擎开启状态:

SHOW ENGINES;

执行结果如下 :

Tips:若 FEDERATED 存储引擎没有启用,可以在 中 [d] 下面一行 federated,然后重启 即可开启。

下面通过建表 来新建 FEDERATED 存储引擎类型的数据表:

CREATE TABLE `test_fed` (
  `id` int() unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar() NOT NULL DEFAULT '',  `age` int() unsigned NOT NULL,
  `id_number` varchar() CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar() DEFAULT NULL,
  PRIMARY KEY (`id`))ENGINE=FEDERATED CONNECTION='://root:123456@127.0.0.1:3306/sakila/actor';

执行结果如下图 :

7. MARIA 存储引擎

MARIA 存储引擎是一种比较新的存储引擎,是为了取代原有的 MyISAM 存储引擎,可以理解为 MyISAM 存储引擎的后续版本。MARIA 存储引擎的特点是数据和索引,应用了行锁设计,提供了多版本并发控制(MVCC),事务。

8. CSV 存储引擎

逻辑上由逗号分割数据的存储引擎。它会在子目录里为每个数据表创建.CSV。这是一种普通文本,每个数据行占用文本行。CSV存储引擎索引。

9. 小结

本小节介绍了 8 种存储引擎, 还提供了很多其他的存储引擎,例如 Merge、S、Infobright,它们分别有各自合适的应用场景,初学者多学习 InnoDB 存储引擎, InnoDB 存储引擎也是在面试中问的最频繁的存储引擎了。本小节只是简单地介绍了这几种存储引擎,了解一下存储引擎基础知识,更深入的关于存储引擎的知识就需要阅读底层源码了。


联系我
置顶