【第2天】每天一个MySQL知识点,百日打怪升级

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
PolarClaw,2核4GB
简介: 【MySQL第2天】深入解析InnoDB与MyISAM核心差异:事务支持、行锁vs表锁、崩溃恢复、外键及适用场景。10年DBA实战总结,助你避开选型陷阱,面试稳拿分!无脑选InnoDB,除非只读/日志等特殊需求。(239字)

存储引擎的选择:InnoDB vs MyISAM


大家好,我是一名拥有10年以上经验的DBA老兵。

做这个系列,源于一个朴素的愿望:把踩过的坑、总结的经验系统化输出,希望能帮到刚入行或想进阶的兄弟们。

让我们开始今天的第2天内容。


背景引入

💡 说白了:选错存储引擎,就像用自行车拉货——不是不行,是费劲。

很多同学建表时不指定存储引擎,默认就是 InnoDB。但你知道吗?在 MySQL 5.5 之前,默认是 MyISAM。

今天的目标:搞清楚 InnoDB 和 MyISAM 的区别,面试必问!


核心概念

什么是存储引擎?

MySQL 的特点是插件式存储引擎,数据怎么存、怎么读,完全由存储引擎决定。

-- 查看MySQL支持的存储引擎及执行结果
> SHOW ENGINES;
+------------------+---------+-------------------------------------------------------------------+--------------+------+------------+
| Engine           | Support | Comment                                                           | Transactions | XA   | Savepoints |
+------------------+---------+-------------------------------------------------------------------+--------------+------+------------+
| MEMORY           | YES     | Hash based, stored in memory, useful for temporary tables        | NO           | NO   | NO         |
| InnoDB           | DEFAULT | Supports transactions, row-level locking, and foreign keys       | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES   | Performance Schema                                               | NO           | NO   | NO         |
| MyISAM           | YES     | MyISAM storage engine                                            | NO           | NO   | NO         |
| MRG_MYISAM       | YES     | Collection of identical MyISAM tables                            | NO           | NO   | NO         |
| BLACKHOLE        | YES     | /dev/null storage engine (anything you write to it disappears)   | NO           | NO   | NO         |
| CSV              | YES     | CSV storage engine                                               | NO           | NO   | NO         |
| ARCHIVE          | YES     | Archive storage engine                                           | NO           | NO   | NO         |
+------------------+---------+-------------------------------------------------------------------+--------------+------+------------+

💡 说白了:存储引擎就是"仓库管理员", InnoDB 是现在的标配,曾经的 MyISAM 是老江湖。


InnoDB vs MyISAM 核心区别

特性 InnoDB MyISAM
事务支持 ✅ 支持 ACID ❌ 不支持
锁粒度 行锁(Row Lock) 表锁(Table Lock)
外键 ✅ 支持 ❌ 不支持
崩溃恢复 ✅ 自动恢复 ❌ 需手动修复
存储方式 聚簇索引 非聚簇索引
COUNT(*) 需要遍历索引 直接读取行数
适用场景 业务数据、事务需求 日志、只读数据

面试必问

  • InnoDB 和 MyISAM 有什么区别?
  • 为什么现在都用 InnoDB?
  • MyISAM 还有人用吗?什么时候用?

📝 面试解答

Q: InnoDB 和 MyISAM 有什么区别?

最核心的区别:InnoDB 支持事务,MyISAM 不支持

  • InnoDB 是行锁,高并发下性能好;MyISAM 是表锁,写操作会锁整张表
  • InnoDB 支持外键,MyISAM 不支持
  • InnoDB 有崩溃自动恢复,MyISAM 坏了可能需要手动修复
  • InnoDB 主键索引就是数据,MyISAM 主键索引是指向数据的指针

Q: 为什么现在都用 InnoDB?

因为绝大多数业务都需要事务支持。转账、订单、库存...没有事务,数据分分钟错乱。

而且 InnoDB 的行锁在并发场景下性能碾压 MyISAM 的表锁。

Q: MyISAM 还有人用吗?什么时候用?

极少数场景:

  • 只读/历史数据:不需要事务,写入一次就不变了
  • 日志表:写入频繁,但不需要事务
  • COUNT(*) 频繁:MyISAM 整表行数存内存里,COUNT(*) 特别快(但 InnoDB 8.0 也优化了)
  • 空间紧张:MyISAM 索引更小

如何选择?

-- 查看表的存储引擎
SHOW TABLE STATUS FROM database_name LIKE 'table_name';
-- 创建表时指定存储引擎
CREATE TABLE t1 (...) ENGINE=InnoDB;
CREATE TABLE t2 (...) ENGINE=MyISAM;

💡 无脑选 InnoDB,除非有特殊理由。


💡 AI辅助选择:让AI根据你的业务场景推荐存储引擎,直接问:
"我的业务是XXX,需要事务/高并发吗?选InnoDB还是MyISAM?"

💡 个人Skill建议:在你的Skill里加一个建表规范检查,检查项包括:

  • 存储引擎是否指定为InnoDB
  • 主键是否自增
  • 字符集是否为utf8mb4
  • 是否有create_time/update_time时间字段
业务场景 推荐引擎 原因
订单/交易/用户 InnoDB 必须事务,行锁高并发
日志/审计表 InnoDB 8.0后性能足够,可靠性更重要
只读报表/历史数据 MyISAM 仅追加写无并发读写要求,定期归档
临时缓存表 MEMORY 内存存储,速度最快

实战案例

场景一:事务回滚

InnoDB 支持事务,可以回滚:

-- 事务测试及执行结果
BEGIN;
INSERT INTO user (name) VALUES ('Tom');
ROLLBACK;
-- 数据被回滚了

MyISAM 不支持事务,ROLLBACK 对它无效:

-- InnoDB 表:事务可以回滚
BEGIN;
INSERT INTO t_innodb (name) VALUES ('Tom');
ROLLBACK;
SELECT COUNT(*) FROM t_innodb;  -- 结果:0(数据被回滚了)

-- MyISAM 表:ROLLBACK 对 MyISAM 无效,数据还在
BEGIN;
INSERT INTO t_myisam (name) VALUES ('Tom');
ROLLBACK;
SELECT COUNT(*) FROM t_myisam;  -- 结果:1(MyISAM 不支持事务,ROLLBACK 无效)

场景二:并发更新

InnoDB 行锁,两个事务可以同时更新不同行:

-- 行锁测试及执行结果
-- 事务1一个连接:UPDATE user SET name='A' WHERE id=1;
-- 事务2另开一个连接:UPDATE user SET name='B' WHERE id=2;  -- 同时执行成功

MyISAM 表锁,写操作会锁整张表:

-- InnoDB 行锁:两个连接同时更新不同行,互不阻塞
-- 连接1:
BEGIN;
UPDATE user SET name='A' WHERE id=1;  -- 只锁 id=1 这一行
-- 连接2(同时执行):
UPDATE user SET name='B' WHERE id=2;  -- ✅ 不阻塞,更新的不是同一行

-- MyISAM 表锁:用 LOCK TABLES 显式持锁才能演示阻塞
-- 连接1:
LOCK TABLES user WRITE;
UPDATE user SET name='A' WHERE id=1;  -- 锁整张表
-- 连接2(同时执行):
UPDATE user SET name='B' WHERE id=2;  -- ❌ 被阻塞,必须等连接1释放锁
-- 连接1:
UNLOCK TABLES;  -- 释放锁后,连接2才能执行

避坑指南

⚠️ 真实踩过的坑:

  1. 建表不指定 ENGINE,默认可能是 MyISAM

    • MySQL 5.5 之前默认 MyISAM,5.5 之后默认 InnoDB
    • 有一些公司规范禁止指定存储引擎,由DBA统一把控
  2. MyISAM 崩溃数据丢失

    • MyISAM 没有崩溃恢复,异常关机可能损坏
    • 重要业务数据千万别用 MyISAM
  3. COUNT(*) 慢?

    • MyISAM 确实快,但 InnoDB 8.0 优化后也不差
    • 别为了 COUNT(*) 快选 MyISAM,不值得
  • InnoDB 8.0 优化后,COUNT(*) 会选最小的二级索引遍历,不再全表扫描

思考题

🤔 互动时间:

  1. 如果某个表不需要事务,就是存日志,选什么引擎?为什么?
  2. 为什么阿里规约要求「表必须使用 InnoDB 存储引擎」?

总结

🎯 面试考点

  • InnoDB vs MyISAM 核心区别:事务、行锁、崩溃恢复
  • InnoDB 支持事务、Row Lock、外键
  • MyISAM 只支持表锁,无事务,适用于只读场景
  • 无脑选 InnoDB,除非有特殊理由

💡 AI实战建议:让自己的AI助手记住建表规范检查清单,每次写CREATE TABLE时自动检查


下期预告:InnoDB存储引擎核心结构 —— 深入底层

【合集】每天一个MySQL知识点,百日打怪升级


有问题欢迎评论区交流,明天见!

相关文章
|
1天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23259 1
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
3天前
|
人工智能 API 开发工具
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
Claude Code是我目前最推荐的AI编程工具,没有之一。 它可能不是最简单的,但绝对是上限最高的。一旦跑通安装、接上模型、定好规范,你会发现很多原本需要几小时的工作,现在几分钟就能搞定。 这套方案的核心优势就三个字:可控性。你不用依赖任何不稳定服务,所有组件都在自己手里。模型效果不好?换一个。框架更新了?自己决定升不升。 这才是AI时代开发者该有的姿势——不是被动等喂饭,而是主动搭建自己的生产力基础设施。 希望这篇保姆教程,能帮你顺利上车。做出你自己的作品。
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
|
10天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
4171 23
|
5天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
2403 6
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
6天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
2878 8
|
22天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
19734 61
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)