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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS Agent(兼容OpenClaw),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知识点,百日打怪升级


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

相关文章
|
13天前
|
消息中间件 存储 运维
【Kafka核心】Kafka 3.0+ KRaft模式(替代ZooKeeper)核心原理与优势
本文系统解析Kafka 3.0+ KRaft模式全知识体系,涵盖背景演进、核心架构、Raft原理、元数据管理、部署运维、最佳实践等九大维度,深度对比ZK模式,详解Controller/Broker角色分离、__cluster_metadata日志机制与毫秒级故障恢复优势,助你掌握Kafka下一代原生元数据管理核心技术。
|
2月前
|
小程序 Linux API
零基础保姆级|阿里云+MacOS/Linux/Windows11部署OpenClaw 千问/Coding Plan API配置+微信小程序集成流程
2026年,AI自动化框架与微信生态深度融合,OpenClaw(原Clawdbot)凭借开源、跨平台部署、多模型兼容与插件化扩展能力,成为连接本地/云端算力与微信小程序交互的核心工具。作为一款轻量化AI执行框架,OpenClaw支持阿里云轻量服务器、ECS云服务器部署,也可在MacOS、Linux、Windows11本地环境运行,能无缝集成阿里云千问大模型、免费Coding Plan大模型API,实现自然语言指令解析、任务自动化执行、微信小程序消息收发与交互,满足个人效率管理、轻量业务开发、小程序智能客服等场景需求。
768 4
|
2月前
|
人工智能 缓存 API
新手零基础阿里云轻量服务器部署OpenClaw接入 Slack 保姆级图文教程
OpenClaw(原Clawdbot)是一款开源AI智能体,能通过多渠道通信与大语言模型整合,构建具备持久记忆、主动执行能力的定制化AI助手,支持本地私有化部署,核心优势在于本地优先、模型无关、多渠道交互、持久化记忆等。对于新手而言,选择阿里云轻量应用服务器部署OpenClaw并接入Slack,可快速实现AI助手的远程调用与团队协作,无需复杂的服务器运维知识,全程可视化操作+少量命令行复制粘贴即可完成部署。
261 9
|
2月前
|
人工智能 自然语言处理 安全
JVSClaw是什么?如何安装?阿里云版AI龙虾实测能写PPT、做Excel、自动发公众号,太强了
JVS Claw是阿里云推出的AI智能助理,JVS Claw官网:https://t.aliyun.com/U/IJbaxg 基于OpenClaw框架,支持手机、PC、网页三端互通。无需验证码,一键下载即用;可选云端或本地部署Clawbot,操作极简。内置Word/PPT/Excel等办公技能,通过ClawHub扩展上千种Skills,真正实现“对话即执行”。
1222 5
|
2月前
|
机器学习/深度学习 人工智能 关系型数据库
英伟达用AI智能体7天自主优化GPU内核,超越人类专家
英伟达推出 AVO 智能体,7 天无人工干预优化 B200 GPU 注意力内核,性能超 cuDNN 最高 3.5%、FlashAttention-4 最高 10.5%,30 分钟可迁移适配,标志 AI 从代码生成器升级为自主进化操盘手,重塑软件工程范式。
|
12天前
|
人工智能 安全 API
Claude Cowork 支持第三方模型接入 开放而不开源
Claude Cowork 正式支持第三方推理平台接入(如Bedrock、Vertex AI、Azure Foundry及兼容/v1/messages的LLM网关),实现工具层与模型层解耦。用户可自由配置国产模型(如Qwen、GLM、DeepSeek等),降低使用门槛与成本,同时保留桌面端Agent工作流、MCP、插件及本地文件访问等核心体验——开放接口,不开放入口。
826 6
Claude Cowork 支持第三方模型接入 开放而不开源
|
12天前
|
数据采集 算法 量子技术
大模型应用:隐私优先的大模型应用:同态加密与大模型结合的完整实践.101
本文深入浅出解析“同态加密+大模型”技术:以全同态加密(FHE)为核心,实现敏感数据(如金融、医疗信息)在密文状态下完成大模型推理,全程不暴露明文,兼顾隐私与智能。涵盖原理、流程、数学基础及Python简易实现。
172 6
|
19天前
|
编解码 数据可视化 前端开发
前端组件库——DataV知识点大全(二)
教程来源 https://www.xbivx.cn DataV提供40+高质量组件,涵盖边框(13种SVG动画边框)、装饰、数字翻牌器、滚动表格、水位图、锥形柱图、飞线图及全屏容器等,支持高度自定义与响应式适配,助力快速构建专业数据大屏。
|
1月前
|
IDE 开发工具 iOS开发
JetBrains IDE 2026.1 (macOS, Linux, Windows) - 跨平台开发者工具
JetBrains IDE 2026.1 (macOS, Linux, Windows) - 跨平台开发者工具
143 7
JetBrains IDE 2026.1 (macOS, Linux, Windows) - 跨平台开发者工具
|
1月前
|
人工智能 Linux API
阿里云轻量服务器部署OpenClaw与千问Qwen3.6-Plus全流程实战:从环境搭建到模型接入及避坑指南
OpenClaw(原Clawdbot)作为2026年主流的开源AI智能体框架,凭借轻量化、跨平台、可自托管、多IM集成与大模型灵活对接的特性,成为个人与团队搭建专属AI助手的首选方案。本文聚焦阿里云轻量服务器部署OpenClaw的最简流程,覆盖本地MacOS/Linux/Windows11全平台部署方法,详解阿里云千问Qwen3.6-Plus高性能API配置、飞书即时通讯集成步骤,并整理全场景高频问题与避坑方案,所有命令可直接复制运行,零基础用户可按步骤一次部署成功。
964 17