MySQL教程 / 第 1 节

MySQL学习快速开始指南

🚀 立即开始

第一步:安装MySQL 5.7

Windows用户:

  1. 阅读 01-基础入门/01-MySQL概述与安装.md
  2. 下载MySQL 5.7 ZIP版本
  3. 按照教程完成安装和配置
  4. 验证安装成功

Linux用户:

  1. 使用YUM或APT安装
  2. 配置my.cnf文件
  3. 启动MySQL服务
  4. 运行安全配置脚本

第二步:学习基础SQL

必须掌握的SQL语句:

-- 数据库操作
CREATE DATABASE mydb;
USE mydb;
SHOW DATABASES;

-- 表操作
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    email VARCHAR(100),
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 数据操作
INSERT INTO users (name, age, email) VALUES ('张三', 20, 'zhangsan@example.com');
SELECT * FROM users;
UPDATE users SET age = 21 WHERE id = 1;
DELETE FROM users WHERE id = 1;

第三步:理解索引(核心)⭐

创建你的第一个索引:

-- 创建测试表
CREATE TABLE test_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT,
    city VARCHAR(50)
);

-- 插入测试数据
INSERT INTO test_users (name, age, city) VALUES
('张三', 20, '北京'),
('李四', 25, '上海'),
('王五', 30, '广州');

-- 查看执行计划(没有索引)
EXPLAIN SELECT * FROM test_users WHERE name = '张三';
-- type: ALL(全表扫描)

-- 创建索引
CREATE INDEX idx_name ON test_users(name);

-- 再次查看执行计划
EXPLAIN SELECT * FROM test_users WHERE name = '张三';
-- type: ref(使用索引)

第四步:配置binlog(重要)⭐

编辑配置文件:

[mysqld]
# 开启binlog
log-bin=mysql-bin
binlog_format=ROW
server-id=1

重启MySQL并验证:

-- 查看binlog是否开启
SHOW VARIABLES LIKE 'log_bin';

-- 查看binlog文件
SHOW BINARY LOGS;

-- 查看当前binlog状态
SHOW MASTER STATUS;

第五步:学习EXPLAIN(必须精通)⭐

分析SQL性能:

-- 创建测试数据
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    amount DECIMAL(10,2),
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_user_id (user_id)
);

-- 分析查询
EXPLAIN SELECT * FROM orders WHERE user_id = 100;

-- 关注以下字段:
-- type: 访问类型(ALL最差,const最好)
-- key: 使用的索引
-- rows: 扫描的行数
-- Extra: 额外信息

📚 学习路径建议

新手阶段(1-2个月)

必学内容:

  1. ✅ MySQL安装和配置
  2. ✅ 基础SQL(DDL、DML、DQL)
  3. ✅ 数据类型和字符集
  4. ✅ 简单查询和多表连接

学习目标:

  • 能够独立安装MySQL
  • 熟练编写基本SQL语句
  • 理解表结构设计

推荐章节:

进阶阶段(2-3个月)

必学内容:

  1. ✅ 索引原理和优化(核心)
  2. ✅ 事务和MVCC
  3. ✅ 锁机制
  4. ✅ 存储引擎

学习目标:

  • 深入理解B+Tree索引
  • 掌握EXPLAIN分析
  • 理解事务隔离级别
  • 能够诊断锁问题

推荐章节:

高级阶段(3-4个月)

必学内容:

  1. ✅ binlog机制(核心)
  2. ✅ 备份和恢复
  3. ✅ SQL优化
  4. ✅ 性能调优

学习目标:

  • 精通binlog的三种格式
  • 制定完善的备份策略
  • 能够优化慢SQL
  • 掌握性能调优技巧

推荐章节:

专家阶段(持续学习)

必学内容:

  1. ✅ 主从复制
  2. ✅ 高可用架构
  3. ✅ 监控和故障排查
  4. ✅ 分库分表

学习目标:

  • 搭建主从复制环境
  • 设计高可用方案
  • 快速诊断和解决故障
  • 处理海量数据

推荐章节:

  • 第22章:主从复制
  • 第24章:高可用方案
  • 第26-28章:监控与诊断
  • 第25章:分库分表

🎯 核心知识点速查

1. binlog三种格式

格式优点缺点使用场景
STATEMENT日志量小可能导致主从不一致不推荐
ROW数据一致性最好日志量大⭐ 推荐(默认)
MIXED平衡复杂可选

2. EXPLAIN type类型(性能从好到差)

system > const > eq_ref > ref > range > index > ALL
  • const: 主键或唯一索引查询(最优)
  • ref: 非唯一索引查询
  • range: 范围查询
  • ALL: 全表扫描(需要优化)

3. 索引失效的场景

-- ❌ 在索引列上使用函数
WHERE YEAR(create_time) = 2024

-- ❌ 隐式类型转换
WHERE phone = 13800138000  -- phone是VARCHAR

-- ❌ 使用!=或<>
WHERE status != 1

-- ❌ 使用OR
WHERE name = '张三' OR age = 20

-- ❌ 前导模糊查询
WHERE name LIKE '%张%'

-- ❌ 违反最左前缀原则
-- 索引:(name, age, city)
WHERE age = 20  -- 跳过了name

4. 事务隔离级别

隔离级别脏读不可重复读幻读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ(默认)
SERIALIZABLE

5. 重要配置参数

[mysqld]
# binlog配置
log-bin=mysql-bin
binlog_format=ROW
sync_binlog=1

# InnoDB配置
innodb_buffer_pool_size=1G  # 物理内存的50%-70%
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=1

# 连接配置
max_connections=500

# 慢查询配置
slow_query_log=1
long_query_time=2

🛠️ 实战练习

练习1:索引优化

-- 创建测试表
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    category VARCHAR(50),
    price DECIMAL(10,2),
    stock INT,
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入10万条测试数据
-- (使用存储过程或脚本)

-- 任务:
-- 1. 分析以下SQL的执行计划
EXPLAIN SELECT * FROM products WHERE category = '电子产品' AND price > 1000;

-- 2. 创建合适的索引
-- 3. 再次分析执行计划,对比优化效果

练习2:binlog分析

-- 1. 执行一些DML操作
INSERT INTO users (name, age) VALUES ('测试用户', 25);
UPDATE users SET age = 26 WHERE name = '测试用户';
DELETE FROM users WHERE name = '测试用户';

-- 2. 查看binlog
SHOW MASTER STATUS;

-- 3. 使用mysqlbinlog工具分析
-- mysqlbinlog -vv mysql-bin.000001

-- 4. 尝试基于binlog恢复数据

练习3:慢查询优化

-- 1. 开启慢查询日志
SET GLOBAL slow_query_log=1;
SET GLOBAL long_query_time=1;

-- 2. 执行一些慢SQL
SELECT * FROM large_table WHERE YEAR(create_time) = 2024;

-- 3. 分析慢查询日志
-- pt-query-digest /var/lib/mysql/slow.log

-- 4. 优化SQL并验证效果

📖 推荐学习资源

官方文档

在线工具

推荐书籍

  • 《高性能MySQL》(第3版)
  • 《MySQL技术内幕:InnoDB存储引擎》
  • 《MySQL排错指南》

❓ 常见问题

Q1: 学习MySQL需要多长时间?

A:

  • 基础入门:1-2个月
  • 进阶提升:2-3个月
  • 高级应用:3-4个月
  • 成为专家:持续学习

Q2: 必须按顺序学习吗?

A: 建议按顺序学习,但可以根据实际需求调整:

  • 如果急需优化SQL,可以先学第18章
  • 如果需要搭建主从,可以先学第22章
  • 但基础知识(索引、事务)必须先掌握

Q3: 如何验证学习效果?

A:

  1. 完成每章的练习题
  2. 搭建实验环境动手实践
  3. 尝试解决实际问题
  4. 参加MySQL认证考试

Q4: MySQL 5.7和8.0有什么区别?

A: 主要区别:

  • 8.0默认字符集是utf8mb4
  • 8.0支持窗口函数、CTE
  • 8.0移除了查询缓存
  • 8.0性能更好
  • 学会5.7后,升级到8.0很容易

🎓 学习建议

  1. 动手实践:每个知识点都要亲自操作验证
  2. 搭建环境:建议搭建主从环境进行实验
  3. 记录笔记:记录重点和遇到的问题
  4. 定期复习:重要章节需要反复学习
  5. 解决问题:尝试解决实际的生产问题
  6. 参与社区:加入MySQL技术社区交流

📞 获取帮助

遇到问题时:

  1. 查看错误日志:/var/log/mysqld.log
  2. 使用EXPLAIN分析SQL
  3. 查看官方文档
  4. 搜索Stack Overflow
  5. 参考本教程的故障排查章节

开始你的MySQL专家之路吧! 🚀

下一步: