当前位置:网站首页>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,毕竟在面对随时都会改需求的互联网项目而言,大而全是我们最好的选择。
感兴趣的朋友可以搜一搜公众号「 阅新技术 」,关注更多的推送文章。
可以的话,就顺便点个赞、留个言、分享下,感谢各位支持!
阅新技术,阅读更多的新知识。
边栏推荐
- SQL注入漏洞(原理篇)
- 狂奔的极兔,摔了一跤
- raspberry pi安装 wiringpi
- 2021-04-15
- 建议自查!MySQL驱动Bug引发的事务不回滚问题,也许你正面临该风险!
- golang--判断字符串是否相等
- 谷歌&HuggingFace| 零样本能力最强的语言模型结构
- 从3开始,在业务系统中增加分页功能
- 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
- After nine years at the helm, the founding CEO of Allen Institute retired with honor! He predicted that Chinese AI would lead the world
猜你喜欢

小米为何深陷芯片泥潭?

Auto - vérification recommandée! Les bogues MySQL ne font pas reculer les transactions, peut - être êtes - vous à risque!

The new version of Alibaba Seata finally solves the idempotence, suspension and empty rollback problems of the TCC mode

Uniswap acquires genie, an NFT transaction aggregator. Will the NFT transaction market change?

js中的push函数介绍

百萬獎金等你來拿,首届中國元宇宙創新應用大賽聯合創業黑馬火熱招募中!
Redis缓存三大异常的处理方案梳理总结

Arrays in JS
详解Redis分布式锁的原理与实现

js遍历数组(用forEach()方法)
随机推荐
微信小程序引导用户添加小程序动画页
JS中的pop()元素
阿里 Seata 新版本终于解决了 TCC 模式的幂等、悬挂和空回滚问题
PHP specified fields are more than 100 in positive order and less than 100 in random order
加快 yarn install 的三个简单技巧
idea查看.class文件 idea查看.class文件夹
Golang -- multiple processing scenarios for files
小米为何深陷芯片泥潭?
2021-04-15
去 OPPO 面试, 被问麻了。。。
How can genetic testing help patients fight disease?
Uniswap acquires genie, an NFT transaction aggregator. Will the NFT transaction market change?
这届文娱人,将副业做成了主业
32. Compose 优美的触摸动画
JS垃圾回收
SQL injection vulnerability (principle)
5分钟快速上线Web应用和API(Vercel)
重卡界销售和服务的“扛把子”,临沂广顺深耕产品全生命周期服务
golang--判断字符串是否相等
Error creating bean with name xxx Factory method ‘sqlSessionFactory‘ threw exception; nested excepti