MySQL 的存储引擎是个蛮关键的模块,尤其是你在做表结构设计或者优化性能的时候,绕不过这个话题。InnoDBMyISAM算是老熟人了,各有千秋,懂点内幕你会更有底气选对引擎。

InnoDB 的行级锁还挺香的,多个用户同时读写都不怎么打架,配合事务,数据完整性也更有保障。写电商后台、支付系统那种对一致性要求高的场景,用它就对了。

MyISAM 的表级锁就显得“憨厚”一些了,插入一条记录都得锁整张表,适合那种读多写少、不太在意事务的系统,比如内容管理后台或者小型数据展示页面。

两种引擎的文件结构也有点差别,像 MyISAM 会分成.frm.MYD.MYI几个文件,文件丢了就挺麻烦。InnoDB 会把数据集中管理,维护起来稍微稳点。

顺便提一句,如果你想手动指定表用哪种引擎,只需要在建表语句里加个ENGINE = MYISAM,比如:

CREATE TABLE tab20 (
  haha CHAR(5),
  xixi CHAR(5)
) ENGINE = MYISAM;

想看建表信息就跑下SHOW CREATE TABLE tab20;。想要默认用哪种引擎,还可以在配置文件里设定default-storage-engine,改完别忘了重启服务。

锁机制那块,MySQL 分得蛮细的,除了表锁、行锁,还有读锁、写锁。简单说,读锁不影响别人读,写锁就谁也别动。这些小细节,理解清楚了能帮你避掉不少性能坑。

如果你对锁机制还有点模糊,推荐你看看这篇《MySQL 全局锁、表级锁与行级锁机制解析》,讲得还挺到位。

哦对,InnoDB 优化、MyISAM 特性啥的,也有几篇不错的参考文章,想深入挖的可以瞅瞅:

如果你正好在调性能、查锁问题,或者想梳理 MySQL 存储引擎的原理逻辑,这份资料真的挺值得一看。