1. MySQL学习笔记:从入门到精通的系统化路径
作为一名数据库工程师,我经常被问到"如何系统学习MySQL"这个问题。今天我想分享自己整理的MySQL学习体系,这是我多年实战和教学经验的结晶。这份笔记不是简单的知识点罗列,而是一个循序渐进的能力成长路线图,适合不同阶段的开发者找到自己的学习重点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MySQL基础架构与核心概念
2.1 存储引擎的选择与比较
InnoDB和MyISAM是MySQL最常用的两种存储引擎,它们的区别远不止"一个支持事务一个不支持"这么简单。在实际项目中,我通常会这样考量:
- InnoDB的聚集索引设计使得主键查询极快,但二级索引需要两次查找(先找主键再找数据)
- MyISAM的全文索引在5.7版本前是唯一选择,但现在InnoDB也已支持
- 内存表(MEMORY引擎)适合临时数据处理,但要注意表锁问题和重启丢失风险
重要提示:从MySQL 8.0开始,系统表全部改用InnoDB,这是官方明确的技术方向。
2.2 事务隔离级别实战分析
教科书上常说"MySQL默认使用可重复读(REPEATABLE-READ)",但实际在Oracle等数据库中读已提交(READ-COMMITTED)才是更常见的选择。通过这个实验可以直观理解区别:
sql复制-- 会话1
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
-- 会话2
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT balance FROM accounts WHERE user_id = 1;
-- 这里会看到未提交的修改吗?
我遇到过的一个真实案例:电商系统中使用REPEATABLE-READ导致库存超卖,因为其他事务看不到已减库存但未提交的变更。后来我们改用READ-COMMITTED+乐观锁解决了问题。
3. 性能优化深度解析
3.1 索引设计与优化原则
创建索引不是越多越好,我有次优化过一个表,原有17个索引,实际只用到了5个。好的索引设计要考虑:
- 高选择性原则:区分度=不重复值/总记录数,大于10%才考
