大家好,我是小米,31岁,Java后端一枚,混迹十八线大厂多年,技术狂热爱好者,喜欢研究源码、写博客、玩中间件。说出来你可能不信,我曾经在一次社招终面上,被一道“老掉牙”的面试题问得差点哑口无言。
那道题就是:“你能说说 InnoDB 和 MyISAM 的区别吗?”
我当时一愣,心里想着:“这不是基础到不行的题吗?面试官你是认真的吗?”
结果,当我用惯常的“三板斧”回答完之后,面试官微微一笑,继续追问:“你刚才说 InnoDB 支持事务,那具体是怎么实现的呢?它的行级锁和间隙锁又是怎么回事?MyISAM不支持事务,那它的写操作时是怎么加锁的?”
我……瞬间噤若寒蝉。
这次“终面翻车”成了我反思的起点,也让我决定系统梳理一遍 MyISAM 与 InnoDB 的差异。今天就把这份“血泪总结”分享给你,希望你社招不再“翻车”。
为什么 MySQL 有多个存储引擎?
“你知道 MySQL 支持插件式存储引擎吗?”这是我和小刘(一起准备跳槽的朋友)在奶茶店的对话。
他一边搅着奶茶一边说:“MySQL 本身是个数据库框架,真正负责数据读写的是底层的存储引擎,就像汽车的引擎,决定了性能、稳定性和能力。”
在 MySQL 中,常见的存储引擎包括:
- InnoDB:默认引擎,支持事务、行级锁、外键
- MyISAM:曾经的默认引擎,读多写少的经典选择
- Memory:基于内存,速度快,但数据不持久
- Archive:用于归档,压缩率高,但只能插入和查询
而 InnoDB 和 MyISAM,就像《火影忍者》里的佐助和鸣人,一个高冷事务型,一个轻盈读写流。到底谁强谁弱,得看场景。
从面试官的角度看:为什么这个题这么常问?
我问过几个做面试官的朋友,他们说:“这个问题看似基础,但能看出一个候选人对数据库理解的深浅。有经验的人,一说就知道懂不懂。