当前位置: 首页 > news >正文

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 后推进企业级增强
✅支持大数据量适合需要存储大量数据的应用
http://www.jsqmd.com/news/694134/

相关文章:

  • ModOrganizer2:游戏模组管理的革命性解决方案
  • 收藏!运维转网络安全完全指南:2026高薪转型路径+避坑攻略
  • 别再乱用if-else了!Verilog条件语句的5个实战避坑指南(附代码对比)
  • rules经验落盘
  • 2026年莫斯科清关代理及俄罗斯报关清关服务推荐:满洲里阿斯特兰纳国际供应链有限公司,提供全方位中俄清关服务 - 品牌推荐官
  • ChatGPT 5.5 重磅更新:从“会说话”到“会工作”
  • 日本“逝去的30年“:中年人最终学会了一件事——与自己和解
  • 终极指南:Windows Cleaner如何快速解决C盘爆红问题
  • 第4篇:Hermes记忆系统实战——让AI真正记住你
  • IMX890传感器在度信盒子上点不亮的排查实录:从MIPI速率到像素速率的完整调试思路
  • 【OpenClaw】通过 Nanobot 源码学习架构---(9)周期性执行
  • 2026年农村自建房墙改梁、老房墙改梁等施工服务推荐:南阳市卧龙区润固建筑修复加固工程队,经验丰富服务佳 - 品牌推荐官
  • XXMI启动器:一站式解决多游戏模组管理难题的智能平台
  • 信创环境实战:在麒麟Lylin v10 ARM服务器上离线部署Node.js生态
  • uniapp unipush推送调试实战:从通知消息到透传消息的完整避坑手册
  • B站成分检测器:如何快速识别评论区用户身份,提升互动效率
  • PyTorch模型加载翻车实录:遇到‘Missing keys’或‘Unexpected keys’报错怎么办?(附排查脚本)
  • 2026最权威的十大降重复率方案推荐榜单
  • 2026年螺旋丝杠保护套、钢制防护罩等机床防护产品厂家推荐:北京怡信康信测量设备有限公司,一站式满足多元设备需求 - 品牌推荐官
  • Windows上直接安装Android应用的终极指南:告别模拟器的5步快速方案
  • 5分钟快速上手:DLSS Swapper终极指南 - 免费提升游戏画质与性能的简单方法
  • 2026终极指南:如何轻松重置JetBrains IDE试用期,告别30天限制烦恼
  • 告别原生QDockWidget的烦恼:用KDDockWidgets给你的Qt工具软件加个‘专业版’拖拽布局
  • 避开内存泄漏和性能坑:海康相机数据转QImage/Hobject/Mat的实战指南
  • 告别CANTP配置恐惧症:手把手教你用Vector CANoe搭建UDS诊断通信环境(附实战Demo)
  • 2026年片材机及生产线厂家推荐:莱州家之和自动化设备有限公司,SMC片材机、碳纤维SMC片材机生产线等全系供应 - 品牌推荐官
  • Python性能分析工具与优化实战指南
  • 科技史上的今天:4月23日
  • PyTorch CUDA检查报‘out of memory’?一个关于`PYTORCH_NVML_BASED_CUDA_CHECK`的避坑指南
  • Windows逆向实战:手把手教你用WinDbg和OD定位TEB结构(含FS寄存器详解)