本文将用20个关键技能点+实战代码,帮你建立MySQL知识体系树!
一、基础操作阶段(入门)
1. 数据库/表操作
-- 创建数据库
CREATE DATABASE shop CHARSET=utf8mb4;
-- 创建商品表
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) CHECK(price > 0),
stock INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 基础CRUD
-- 插入数据
INSERT INTO products(name, price)
VALUES ('无线鼠标', 89.90);
-- 更新库存
UPDATE products
SET stock = stock + 10
WHERE id = 1;
-- 分页查询
SELECT * FROM products
ORDER BY price DESC
LIMIT 10 OFFSET 0;
二、进阶应用阶段(熟练)
1. 索引优化
-- 创建组合索引
ALTER TABLE orders
ADD INDEX idx_user_product (user_id, product_id);
-- 查看执行计划
EXPLAIN SELECT * FROM orders
WHERE user_id = 1001 AND product_id = 5;
2. 事务控制
START TRANSACTION;
UPDATE account SET balance = balance - 500
WHERE user_id = 1001;
UPDATE account SET balance = balance + 500
WHERE user_id = 1002;
-- 模拟异常
-- ROLLBACK;
COMMIT;
3. 复杂查询
-- 联表查询+聚合
SELECT u.name, COUNT(o.order_id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.create_time > '2023-01-01'
GROUP BY u.id
HAVING order_count > 5;
三、高级优化阶段(精通)
1. 执行计划深度解析
-- 使用覆盖索引优化
EXPLAIN SELECT product_id
FROM orders
WHERE user_id = 1001
AND create_time BETWEEN '2023-01-01' AND '2023-12-31';
2. 锁机制处理
-- 悲观锁示例
SELECT * FROM products
WHERE id = 1
FOR UPDATE;
-- 更新操作...
3. 性能调优
-- 慢查询日志分析
# 在my.cnf中配置
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
四、架构设计阶段(专家)
1. 分库分表示例
-- 按用户ID分表(1024张表)
CREATE TABLE order_0000 LIKE order_template;
CREATE TABLE order_0001 LIKE order_template;
...
-- 路由算法
table_suffix = user_id % 1024;
2. 主从复制配置
-- 主库配置
[mysqld]
server-id=1
log-bin=mysql-bin
-- 从库配置
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
3. 高可用方案
-- MHA故障转移命令
masterha_check_repl --conf=/etc/mha/app1.cnf
masterha_master_switch --master_state=alive...
五、精通MySQL的20个标志
-
能准确说出varchar(255)和text的区别
- varchar最大行限制65535字节
- text单独存储,不影响行限制
-
能设计高效的索引策略
-- 使用前缀索引 ALTER TABLE logs ADD INDEX idx_url_prefix (url(20));
-
能处理死锁问题
SHOW ENGINE INNODB STATUS; -- 查看死锁信息
-
能优化百万级数据查询
-- 分页优化 SELECT * FROM products WHERE id > 1000 ORDER BY id LIMIT 10;
-
能配置安全的用户权限
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!'; GRANT SELECT, INSERT ON shop.* TO 'app_user'@'%';
-
能使用存储过程开发
DELIMITER // CREATE PROCEDURE UpdateStock(IN product_id INT, IN qty INT) BEGIN UPDATE products SET stock = stock + qty WHERE id = product_id; END // DELIMITER ;
-
能进行数据热备份
mysqldump --single-transaction -u root -p shop > backup.sql
-
能解读InnoDB存储结构
SHOW TABLE STATUS LIKE 'products'\G
-
能优化SQL语句性能
-- 避免使用SELECT * SELECT id, name FROM products WHERE ...;
-
能设计数据库规范
- 命名规范:表名小写+下划线
- 字段规范:NOT NULL优先
- 索引规范:联合索引顺序
六、实战案例:电商系统数据库设计
1. 核心表结构
-- 用户表
CREATE TABLE users (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
encrypted_password CHAR(60) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_created (created_at)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
-- 订单表(分表)
CREATE TABLE orders_2023 (
order_id VARCHAR(32) PRIMARY KEY,
user_id BIGINT UNSIGNED NOT NULL,
total_amount DECIMAL(12,2),
status TINYINT DEFAULT 0,
INDEX idx_user (user_id)
) PARTITION BY RANGE (YEAR(create_time)) (
PARTITION p2023 VALUES LESS THAN (2024)
);
2. 性能优化方案
- 使用Redis缓存热点商品数据
- 使用Elasticsearch实现商品搜索
- 使用ClickHouse进行订单分析
七、学习资源推荐
-
经典书籍
- 《高性能MySQL(第4版)》
- 《MySQL技术内幕:InnoDB存储引擎》
-
实战工具
- Percona Toolkit:数据库运维工具包
- pt-query-digest:慢查询分析工具
- mysqldumpslow:内置慢查询分析
精通MySQL的最终标志
✅ 能独立设计百万级TPS系统数据库架构
✅ 能快速定位并解决生产环境性能问题
✅ 能制定团队数据库开发规范并实施
持续学习建议
- 关注MySQL官方的Release Notes
- 参与数据库相关开源项目
- 定期进行全链路压测
(原创不易,转载请注明出处)