Skip to main content
MySQL 是最流行的开源关系型数据库,也是后端开发必备技能。

目录

学习路线

阶段主题核心内容链接
1SQL 基础DDL、DML、DQL、DCL进入学习
2SQL 进阶多表查询、子查询、函数、视图、存储过程进入学习
3索引B+Tree、索引类型、索引优化进入学习
4事务ACID、隔离级别、MVCC进入学习
5锁机制表锁、行锁、间隙锁、死锁进入学习
6性能优化执行计划、慢查询、SQL优化进入学习
7高可用主从复制、读写分离、分库分表进入学习

快速参考

常用命令

-- 连接数据库
mysql -u root -p

-- 查看数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE mydb DEFAULT CHARSET utf8mb4;

-- 使用数据库
USE mydb;

-- 查看表
SHOW TABLES;

-- 查看表结构
DESC table_name;

-- 查看建表语句
SHOW CREATE TABLE table_name;

数据类型速查

分类类型说明
整数TINYINT, INT, BIGINT1/4/8 字节
小数DECIMAL(M,D), FLOAT, DOUBLE精确/近似小数
字符串CHAR(n), VARCHAR(n), TEXT定长/变长/大文本
日期DATE, DATETIME, TIMESTAMP日期/日期时间/时间戳
二进制BLOB二进制大对象
JSONJSONMySQL 5.7+

核心知识点

MySQL 核心知识体系
├── SQL 语言
│   ├── DDL - 数据定义(CREATE/ALTER/DROP)
│   ├── DML - 数据操作(INSERT/UPDATE/DELETE)
│   ├── DQL - 数据查询(SELECT)
│   └── DCL - 权限控制(GRANT/REVOKE)
├── 存储引擎
│   ├── InnoDB - 默认引擎,支持事务、行锁
│   └── MyISAM - 不支持事务,表锁,读取快
├── 索引
│   ├── 聚簇索引 - 主键索引,数据和索引一起存储
│   ├── 二级索引 - 非主键索引,需要回表
│   └── 覆盖索引 - 索引包含所需字段,无需回表
├── 事务
│   ├── ACID 特性
│   ├── 隔离级别 - RU/RC/RR/Serializable
│   └── MVCC - 多版本并发控制
├── 锁
│   ├── 全局锁、表锁、行锁
│   ├── 间隙锁、临键锁
│   └── 意向锁
└── 日志
    ├── redo log - 重做日志,保证持久性
    ├── undo log - 回滚日志,保证原子性
    └── binlog - 归档日志,主从复制

面试高频

  • InnoDB 和 MyISAM 的区别?
  • B+Tree 为什么比 B-Tree 更适合做索引?
  • 什么是回表查询?如何避免?
  • 索引失效的场景有哪些?
  • 事务的隔离级别?MySQL 默认是哪个?
  • MVCC 是如何实现的?
  • 什么是幻读?RR 级别下如何解决?
  • 什么是死锁?如何避免?
  • 慢查询如何优化?
  • 主从复制的原理?