当前位置:网站首页>mysql 系列:存储引擎
mysql 系列:存储引擎
2022-06-23 14:38:00 【yue_xin_tech】
介绍
在上一篇文章 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,毕竟在面对随时都会改需求的互联网项目而言,大而全是我们最好的选择。
感兴趣的朋友可以搜一搜公众号「 阅新技术 」,关注更多的推送文章。
可以的话,就顺便点个赞、留个言、分享下,感谢各位支持!
阅新技术,阅读更多的新知识。
边栏推荐
- 快速排序的简单理解
- 巴比特 | 元宇宙每日必读:Meta、微软等科技巨头成立元宇宙标准论坛组织,华为、阿里加入,英伟达高管称欢迎来自加密世界的参与者...
- 【Pyside2】 pyside2的窗口在maya置顶(笔记)
- JS里的数组
- PHP specified fields are more than 100 in positive order and less than 100 in random order
- 物流贸易相关
- Google &huggingface| zero sample language model structure with the strongest ability
- Top 10 purchase, sales and inventory software rankings!
- Error creating bean with name xxx Factory method ‘sqlSessionFactory‘ threw exception; nested excepti
- [Level 2 warranty] which brand of Fortress machine is good for Level 2 warranty?
猜你喜欢

KDD'22「阿里」推荐系统中的通用序列表征学习

Ie mode of selenium edge

idea查看.class文件 idea查看.class文件夹

【DataHub】LinkedIn DataHub学习笔记

Tencent ECS failed to send email
Xampp中mysql无法启动问题的解决方法

Un million de bonus vous attend, le premier concours d'innovation et d'application de la Chine Yuan cosmique Joint Venture Black Horse Hot Recruitment!

杀入美团、饿了么腹地,京东外卖劲儿有多大?

小米为何深陷芯片泥潭?

The new version of Alibaba Seata finally solves the idempotence, suspension and empty rollback problems of the TCC mode
随机推荐
Summary of operating system underlying knowledge (interview)
【云驻共创】制造业企业如何建设“条码工厂”
腾讯云服务器发送邮件失败
Illustration of ONEFLOW's learning rate adjustment strategy
[cloud based co creation] intelligent supply chain plan: improve the decision-making level of the supply chain and help enterprises reduce costs and increase efficiency
k8s--部署单机版MySQL,并持久化
期货怎么开户安全吗,期货手续费哪家期货公司比较低,适合散户开户?
idea查看.class文件 idea查看.class文件夹
AXI_Round_Robin_Arbiter 设计 - AW、W通道部分
[cloud based co creation] how manufacturing enterprises build "barcode factories"
2021-06-03
The work and development steps that must be done in the early stage of the development of the source code of the live broadcasting room
mysql主从只同步部分库或表的思路与方法
Idea view View the class file idea Class folder
Simple tutorial of live streaming with OBS
Unshift() and shift() of JS
建议自查!MySQL驱动Bug引发的事务不回滚问题,也许你正面临该风险!
2021-04-15
Golang-- judge whether the strings are equal
聚合生态,使能安全运营,华为云安全云脑智护业务安全