news 2026/4/24 19:22:17

MySQL篇01-为什么MySQL默认引擎为Innodb

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL篇01-为什么MySQL默认引擎为Innodb

✅前言


在学学习MySQL时同学们可能会有疑问,MySQL引擎是什么东西?这些引擎有什么用途和区别?我要怎么选择这些引擎?接下来我将让大家明白为什么innodb是默认引擎。

✅引擎分类

引擎特点
InnoDBACID事物,行极锁,外键,崩溃恢复
MyISAM全文索引,扫描效率高,表记锁定,压缩存储
Memory基于内存存储,数据易丢失

✅引擎对比

📍InnoDB和MyISAM

对于这两个引擎我们都可能会用到,只不过使用的场景不同,innodb一般用于多查询的表,
Myisam一般用于多增改的表。

innodb支持事物管理,而Myisam则不支持事物管理。这是一个很重要的因素,试想一下一个人在银行进行存钱,他刚把钱存入机器,但是银行系统出现了bug,导致他的账户上的资金没有变化。这是一个很严重的问题,所以我们需要事物管理来接解决这个问题。

而且innodb的索引设计和锁结构都要优于Myisam,再加上现在技术的不断发展innodb的增改删操作速度也不断加快,导致Myisam的优势再度变小,最终在Mysql5.5版本后innodb成为了默认引擎。

📍InnoDB和Memory

对于Memory而言是基于内存存储的引擎,这使得Memory查询速度十分迅速就像坐火箭一样。但是他有个致命弱点就是就是数据不会持久化。MySQL 服务重启后,所有数据都将丢失。我们数据库是保存数据的地方,如果连数据都会丢失,那还要数据库干嘛,直接用txt文件存不更方便,反正都可能会丢失。而且对于Memory这样快查询的特点,我们有跟好的选择——Redis。也就是因为种种原因导致Memory在开发中基本很少使用

✅ InnoDB引擎的优点

📌1.支持事务

  • InnoDB 支持 ACID(原子性、一致性、隔离性、持久性)事务,这意味着它能够保证数据库操作的完整性,即使在发生系统崩溃或其他异常情况下。事务支持使得数据的操作变得更加可靠。
    原子性:要么全部成功,要么全部失败。一致性:事务完成后,数据库总是处于一致的状态。隔离性:事务之间相互独立,不会互相影响。持久性:事务一旦提交,其结果是永久保存的。
  • 📌2.支持外键约束
    • InnoDB 支持 外键约束,这允许在数据库表之间建立关系,确保数据的完整性和一致性。外键约束能够确保:
      外键列的值在引用表中必须存在。防止删除或更新父表中的行时破坏子表的数据完整性。其他存储引擎(如 MyISAM)不支持外键,因此对于需要建立关系型数据模型的应用,InnoDB 是更好的选择。
  • 📌 3.行级锁定
    • InnoDB 支持 行级锁定(而不是表级锁定),这意味着它可以在多个并发操作之间提供更细粒度的锁定,从而提高数据库的并发性能。当多个用户同时更新不同的行时,InnoDB 只会锁定被修改的行,而不会锁定整个表,从而提高了并发性。
      这种行级锁定在高并发的环境下尤其重要,可以大大减少锁竞争,提高效率。
  • 📌4.崩溃回复能力
    • InnoDB 使用了 日志文件 和 重做日志,它能够在数据库崩溃后进行数据恢复。这意味着即使在系统异常关闭或崩溃后,InnoDB 也能确保数据的完整性和一致性,不会丢失已提交的事务。
      这对于需要高可用性的系统非常重要。
  • 📌5.索引性能优化
    • InnoDB 提供了 B+ 树索引(适用于主键、唯一索引和普通索引),这使得它在查询性能上非常强大,尤其是对于需要高效检索的查询场景。它还能自动为索引创建和更新最优执行计划,以提高查询性能。
  • 📌6.支持大数据量
    • InnoDB 设计上支持非常大的表和数据量,并且能在处理大量数据时保持较好的性能。它能够优化存储空间和查询效率,适合需要存储大量数据的应用。

✅实例演示

📌创建表并使用InnoDB引擎

createtableuser(idintprimarykeyauto_increment,usernamevarchar(30)notnull,emailvarchar(100)notnull,ageint)engine=innodb;createtableorders(idINTPRIMARYKEYAUTO_INCREMENT,user_idINTNOTNULL,order_dateDATETIMEDEFAULTCURRENT_TIMESTAMP,totalDECIMAL(10,2)NOTNULL)engine=innodb;

📌在创建表的 ‘)’ 后添加engine关键词即可指定这个表所依赖的引擎

使用事务像表中添加数据

BEGINTRANSACTION;INSERTINTOusers(username,email,age)VALUES('张三','zhangsan@example.com',25);INSERTINTOorders(user_id,order_date,total)VALUES(LAST_INSERT_ID(),NOW(),199.99);-- 如果一切顺利,提交事务COMMIT;

如果在向users添加完数据后,系统异常orders没有添加数据,则事务回滚users中的数据也添加失败

📌插入数据并处理错误

BEGINTRANSACTION;BEGINTRYINSERTINTOproducts(product_name,price)VALUES('新产品',50.00);-- 这里做一些可能会失败的操作,例如违反唯一约束INSERTINTOproducts(product_name,price)VALUES('新产品',50.00);-- 可能会引发唯一约束错误COMMIT;-- 如果没有错误,提交事务ENDTRYBEGINCATCHROLLBACK;-- 如果发生错误,回滚事务-- 你可以选择打印错误消息PRINT'事务回滚: '+ERROR_MESSAGE();ENDCATCH;

🎯总结

在MySQL5.5后成为默认引擎原因如下

原因解释
✅支持事务保证数据库操作的完整性
✅行级锁定减少锁竞争,提高效率
✅崩溃恢复在系统崩溃后也能找会数据
✅支持和社区支持Oracle 主导 MySQL 后推进企业级增强
✅支持大数据量适合需要存储大量数据的应用
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 19:21:41

别再死记硬背了!用Python+LTspice仿真,5分钟搞懂RC/RL滤波电路截止频率

用PythonLTspice仿真5分钟掌握RC/RL滤波电路截止频率 在电子工程的学习中,RC和RL滤波电路是最基础也最重要的概念之一。传统的学习方法往往要求学生死记硬背截止频率公式,这不仅枯燥乏味,也难以真正理解电路行为的本质。本文将介绍一种全新的…

作者头像 李华
网站建设 2026/4/24 19:20:52

华为交换机sFlow配置避坑指南:Agent IP选错、采样率设多少?一次讲清

华为交换机sFlow配置实战:从原理到调优的深度解析 在数据中心和大型企业网络运维中,流量监控是保障网络健康运行的关键环节。华为交换机的sFlow技术作为一种高效的流量采样协议,能够以极低的性能开销实现全网流量可视化。然而,许多…

作者头像 李华
网站建设 2026/4/24 19:19:44

解锁喜马拉雅VIP音频:3步打造个人离线有声图书馆

解锁喜马拉雅VIP音频:3步打造个人离线有声图书馆 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 还在为喜马拉雅VIP音频…

作者头像 李华
网站建设 2026/4/24 19:15:48

2026 年临沂企业管理咨询公司权威推荐

在临沂的一个饭局上,一位老板气呼呼地说:“我明明订单不断,可就是不赚钱!”你是不是也这样?忙得晕头转向,却见不到利润。30 人到 100 人是道坎,为啥?因为你这儿责任转移不了&#xf…

作者头像 李华
网站建设 2026/4/24 19:14:28

RT-Smart开发避坑指南:区分arm与aarch64,选对musl-gcc工具链

RT-Smart开发实战:arm与aarch64工具链精准选择与避坑策略 第一次接触RT-Smart时,我花了整整两天时间排查一个诡异的编译错误——明明按照文档步骤操作,却始终卡在链接阶段。直到偶然发现BSP平台描述中那个不起眼的"aarch64"字样&am…

作者头像 李华