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 所有的表都保存在同一个数据文件中。索引支持
:有的是聚集索引,直接叶子节点上存放数据,有的在叶子节点只存了数据区域的指针。
当然,很多时候我们会直接的选择默认的存储引擎 InnoDB,毕竟在面对随时都会改需求的互联网项目而言,大而全是我们最好的选择。
【mysql 系列(存储引擎)】感兴趣的朋友可以搜一搜公众号「 阅新技术 」,关注更多的推送文章。
可以的话,就顺便点个赞、留个言、分享下,感谢各位支持!
阅新技术,阅读更多的新知识。
文章图片
推荐阅读
- 【欢喜是你·三宅系列①】⑶
- 你不可不知的真相系列之科学
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 2018-06-13金句系列7(金句结构-改编古现代诗词)
- Unity和Android通信系列文章2——扩展UnityPlayerActivity
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复
- 乡野村趣系列之烧仙草
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)