MySQL 数据库
欢迎来到 MySQL 数据库知识库!
🐬 MySQL 简介
MySQL 是世界上最流行的开源关系型数据库管理系统之一,以其可靠性、易用性和高性能而著称。广泛应用于Web应用、企业应用和嵌入式数据库系统。
🎯 适用场景
✅ 特别适合
- Web 应用 - LAMP/LNMP 栈的核心
- 中小型应用 - 电商、CMS、论坛
- 读多写少 - 博客、新闻网站
- OLTP 事务 - 订单、支付、用户系统
- 分布式架构 - 主从复制、读写分离
⚠️ 不太适合
- 极高并发写入(可以使用分库分表)
- 复杂的 OLAP 分析(推荐 ClickHouse)
- 非结构化数据(推荐 MongoDB)
🎯 学习路线
第一阶段:SQL 基础 (1-2周)
数据定义 (DDL)
- CREATE 创建表
- ALTER 修改表
- DROP 删除表
数据操作 (DML)
- INSERT 插入
- UPDATE 更新
- DELETE 删除
数据查询 (DQL)
- SELECT 查询
- WHERE 条件
- JOIN 连接
- GROUP BY 分组
- ORDER BY 排序
第二阶段:高级特性 (2-3周)
索引
- B+ 树索引
- 唯一索引
- 联合索引
- 覆盖索引
事务
- ACID 特性
- 隔离级别
- 锁机制
存储过程与触发器
- 存储过程
- 函数
- 触发器
第三阶段:性能优化 (持续)
查询优化
- EXPLAIN 分析
- 慢查询日志
- 索引优化
架构优化
- 主从复制
- 读写分离
- 分库分表
✨ MySQL 特点
✅ 核心优势
- 开源免费 - 社区版完全开源
- 易于使用 - 安装配置简单
- 高性能 - 优化的查询引擎
- 可靠性 - 事务支持、ACID 保证
- 跨平台 - 支持多种操作系统
- 社区活跃 - 丰富的文档和资源
- 生态完善 - 各种语言的驱动支持
🔧 存储引擎
| 引擎 | 事务 | 锁 | 特点 | 适用场景 |
|---|---|---|---|---|
| InnoDB | ✅ | 行锁 | 支持外键、事务 | 默认引擎、通用场景 |
| MyISAM | ❌ | 表锁 | 查询快、不支持事务 | 只读场景(已过时) |
| Memory | ❌ | 表锁 | 内存存储 | 临时数据、缓存 |
📖 SQL 速查
数据库操作
sql
-- 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 删除数据库
DROP DATABASE mydb;
-- 使用数据库
USE mydb;表操作
sql
-- 创建表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100),
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 修改表
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users MODIFY COLUMN age TINYINT;
ALTER TABLE users DROP COLUMN phone;
-- 删除表
DROP TABLE users;CRUD 操作
sql
-- 插入
INSERT INTO users (username, email, age) VALUES ('张三', 'zhang@example.com', 25);
-- 批量插入
INSERT INTO users (username, email, age) VALUES
('李四', 'li@example.com', 30),
('王五', 'wang@example.com', 28);
-- 查询
SELECT * FROM users;
SELECT username, email FROM users WHERE age > 25;
SELECT * FROM users WHERE username LIKE '张%';
SELECT * FROM users ORDER BY age DESC LIMIT 10;
-- 更新
UPDATE users SET age = 26 WHERE username = '张三';
-- 删除
DELETE FROM users WHERE id = 1;高级查询
sql
-- JOIN 连接
SELECT u.username, o.order_no
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- 分组聚合
SELECT age, COUNT(*) as count
FROM users
GROUP BY age
HAVING count > 1;
-- 子查询
SELECT * FROM users
WHERE age > (SELECT AVG(age) FROM users);🔍 索引优化
创建索引
sql
-- 普通索引
CREATE INDEX idx_email ON users(email);
-- 唯一索引
CREATE UNIQUE INDEX idx_username ON users(username);
-- 联合索引
CREATE INDEX idx_age_created ON users(age, created_at);
-- 全文索引
CREATE FULLTEXT INDEX idx_content ON articles(content);
-- 查看索引
SHOW INDEX FROM users;
-- 删除索引
DROP INDEX idx_email ON users;索引使用原则
- 最左前缀原则 - 联合索引从左到右匹配
- 避免索引失效 - 函数、隐式转换、!=、NOT IN
- 覆盖索引 - 查询字段都在索引中
- 索引选择性 - 区分度高的字段优先
🔒 事务
sql
-- 开始事务
START TRANSACTION;
-- 执行操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 提交
COMMIT;
-- 回滚
ROLLBACK;隔离级别
sql
-- 查看隔离级别
SELECT @@transaction_isolation;
-- 设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| READ UNCOMMITTED | ✅ | ✅ | ✅ |
| READ COMMITTED | ❌ | ✅ | ✅ |
| REPEATABLE READ (默认) | ❌ | ❌ | ✅ |
| SERIALIZABLE | ❌ | ❌ | ❌ |
📊 性能优化
EXPLAIN 分析
sql
EXPLAIN SELECT * FROM users WHERE age > 25;关键字段:
- type - 连接类型(system > const > eq_ref > ref > range > index > ALL)
- key - 实际使用的索引
- rows - 扫描的行数
- Extra - 额外信息(Using index、Using filesort)
慢查询日志
sql
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query%';🚀 高可用架构
主从复制
┌─────────┐ 写入 ┌─────────┐
│ 应用 │ ─────> │ Master │
└─────────┘ └─────────┘
│ │
│ 读取 │ 同步
↓ ↓
┌─────────┐ ┌─────────┐
│ Slave 1 │ <────── │ Slave 2 │
└─────────┘ └─────────┘读写分离
- 写操作 → Master
- 读操作 → Slave(负载均衡)
💡 最佳实践
表设计
- 选择合适的数据类型
- NOT NULL + DEFAULT
- 主键使用 AUTO_INCREMENT
- 时间字段使用 TIMESTAMP
索引设计
- 主键索引
- 高频查询字段添加索引
- 联合索引注意顺序
- 避免过多索引
查询优化
- SELECT 指定字段,避免 SELECT *
- 使用 LIMIT 分页
- 避免 OR,使用 IN
- 避免在 WHERE 中使用函数
安全
- 最小权限原则
- 定期备份
- 参数化查询防止 SQL 注入
📖 学习资源
官方资源
推荐书籍
- 《高性能 MySQL》
- 《MySQL 技术内幕:InnoDB 存储引擎》
- 《MySQL 必知必会》
准备好了吗?开始你的 MySQL 学习之旅!