专栏首页后端mysql 系列:存储引擎
原创

mysql 系列:存储引擎

介绍

在上一篇文章 mysql 总体概述 里我们大概了解了 mysql 的架构设计,其中提到了存储引擎。它在 mysql 里是一个非常重要的角色,负责了数据的创建、读取和更新,也就是数据的 I/O 操作。

最重要的是,它是可插拔的模块,这意味着我们在切换存储引擎时,对于上层应用来讲,是不需要做任何适配的。

存储引擎有很多种,而且都有属于自己的特性,像我们常见的 InnoDB 有事务支持、MyISAM 速度较快等。

存储引擎的用法

作为插件化的模块,我们可以很自然的添加、卸载存储引擎,并且在创建表时指定存储引擎。

加载存储引擎

mysql 通过已经定义好的 API 接口与存储引擎通信,所以我们只要实现对应的 API 接口,就可以在 mysql 运行时加载进来。

在 mysql 源码里有一个 example 的存储引擎,我们可以看到它需要实现的 API 接口如下:

存储引擎接口

当我们实现了这些方法后,就可以把它编译为共享库,然后使用下面的语句加载进来了

INSTALL PLUGIN example SONAME 'example.so';

需要注意的是,插件文件必须位于 mysql 插件目录中,并且拥有对 plugin 表的 INSERT 权限。

卸载存储引擎

要卸载存储引擎,就比较简单了

UNINSTALL PLUGIN example;

当卸载后,对应的表将不可访问,所以一定要注意是否还有该存储引擎的表在使用!

查看并使用存储引擎

当我们加载了存储引擎后,可以使用下面的命令来查看:

show engines;

如果我们想要使用对应的存储引擎时,可以使用下面的方法:

  • 创建表时指定:CREATE TABLE t1 (id INT) ENGINE = INNODB;
  • 设置默认使用:SET default_storage_engine=INNODB;
  • 修改表时指定:ALTER TABLE t ENGINE = InnoDB;

其中 ALTER TABLE 将会把旧表复制到新的表,并且在此期间都会加锁使用,要特别注意。

存储引擎的种类特点

在 mysql 里实现了很多种的存储引擎,每种存储引擎都有属于它们的特色。我们来看看 mysql 里支持的存储引擎有哪些吧。

InnoDB:它是 mysql 的默认存储引擎,能够实现 ACID 特性的事务,并且能提交、回滚、恢复数据,能很好的保障用户数据。同时支持了行级锁、聚集索引以及外键约束,是一个完善的存储引擎。

MyISAM:是 mysql 最开始的存储引擎,占用空间小,能快速存储,但不支持事务,提供了基于表级别的锁粒度,适用于配置或只读功能的应用程序。

Memory:数据都是存在内存里的,能提供快速访问,不过应该较少人使用,毕竟一旦断电数据也就丢失了。

CSV:带有逗号分隔值的文本文件,没有索引存在。但是兼容性很好,可以跟其他的程序交换数据。

其他存储引擎使用较少,就不再提及了,

存储引擎的差异点

存储引擎都有属于自己的特性,它们的差异点大致上可以归纳如下:

  • 并发性:对锁的粒度操控不一样,有的提供了表锁,有的提供了行锁,甚至有的还提供了快照读。
  • 事务:有的存储引擎支持,有的不支持,并不是每个程序的设计都需要事务,像日志这种流水数据就不需要了。
  • 参照完整性:即是否支持外键,有了外键,则关联性强,在删除的时候会做关联检查。
  • 存储方式:在表和索引的存储方式上不一样,像 MyISAM 会存储成三个文件,InnoDB 所有的表都保存在同一个数据文件中。
  • 索引支持:有的是聚集索引,直接叶子节点上存放数据,有的在叶子节点只存了数据区域的指针。

总结

插件式的存储引擎为我们带来了多种选择,使用哪个存储引擎其实并没有指定的规则,只能是按照当前的需求分析去选择。像想要全文索引,可以选择 MyISAM 或 InnoDB,想要数据完整性或者是事务支持,则需要选择 InnoDB。

当然,很多时候我们会直接的选择默认的存储引擎 InnoDB,毕竟在面对随时都会改需求的互联网项目而言,大而全是我们最好的选择。


感兴趣的朋友可以搜一搜公众号「 阅新技术 」,关注更多的推送文章。

可以的话,就顺便点个赞、留个言、分享下,感谢各位支持!

阅新技术,阅读更多的新知识。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL存储引擎

    定义 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定...

    武培轩
  • Mysql存储引擎

    彼岸舞
  • MySQL 存储引擎 原

    使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。

    wuweixiang
  • MongoDB系列7:MongoDB存储引擎

    1、前言 存储引擎是数据库的组成部分,负责管理数据存储。 MongoDB支持的以下存储引擎: 存储引擎描述WiredTiger存储引擎从MongoDB 3.2开...

    大数据和云计算技术
  • MySQL存储引擎总结

    前言 在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储引擎。等一下,...

    wangxl
  • mysql存储引擎、事务

    MySQL存储引擎介绍 文件系统 操作系统组织和存取数据的一种机制。 文件系统是一种软件。 文件系统类型 ext2  ext3  ext4  xfs 数据 不管...

    863987322
  • MySQL存储引擎小记

    休辞醉倒
  • MySQL必知存储引擎

    1.MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务.

    HueiFeng
  • 3,mysql的存储引擎

    1,什么是存储引擎,存储引擎说白了就是如何存储数据,如何为存储的数据建立索引和如何更新,查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的...

    py3study
  • MySQL 存储引擎(2)原

    顾名思义,存储引擎就是用于存储我们的数据的。在关系型数据库中我们一般将数据库存放在表中(Table)。

    兜兜毛毛
  • MySQL中的存储引擎

    MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通...

    changxin7
  • MySQL - 存储引擎初探

    存储引擎是 MySQL 中具体与文件打交道的子系统,它是根据 MySQL AB 公司提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎 。

    小小工匠
  • 浅析MySQL存储引擎序列属性

    墨墨导读:为了达到标识的目的,许多应用程序需要生成唯一编号,比如:商品编号、交易流水号等。MySQL数据库同样能够支持这样的需求场景,AUTO_INCREMEN...

    数据和云
  • mysql 谈谈innodb存储引擎

    5.7版本引入了模式自动转换的功能,但该语法依然保留了。 另外一个有趣的点是,在5.7版本中,你可以通过设置session_track_transactio...

    Java架构师历程
  • MySQL 谈谈Memory存储引擎

    memory存储引擎是MySQL中的一类特殊的存储引擎。其使用存储在内存中的内容来创建表,而且所有数据也放在内存中。这些特性都与InnoDB,MyISAM存储引...

    Java架构师历程
  • MYSQL 浅谈MyISAM 存储引擎

           mysql中用的最多存储引擎就是innodb和myisam。做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对《高性能MYSQ...

    Java架构师历程
  • MySQL存储引擎知多少

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的“存储引擎”(storage_engine)呢?有时候面试题中也会问道MyS...

    Bug开发工程师
  • MySQL InnoDB 存储引擎探秘

    在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库中。从MySQL5.5.8开始,InnoDB成为其默认的存储引擎。InnoDB存储引擎支持事...

    烂猪皮
  • Mysql 学习 --- innodb存储引擎

    1.MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引...

    用户4158112

扫码关注云+社区

领取腾讯云代金券