MySQL系统化学习

学习 MySQL 是掌握现代 Web 开发、数据分析和后端服务的关键技能。以下是系统化的学习路径,从基础安装到高级优化,帮助你成为高效的 MySQL 使用者。

一、MySQL 基础入门

1. 安装与配置

1-1:安装方式

Windows​:使用 MySQL Installer(包含图形化工具)

Linux​:

# Ubuntu/Debian
sudo apt install mysql-server
sudo systemctl start mysql

# CentOS/RHEL
sudo yum install mysql-server
sudo systemctl start mysqld

Mac​:brew install mysql

1-2:安全初始化

sudo mysql_secure_installation
# 设置root密码、移除匿名用户等

2. 基础操作

连接MySQL

mysql -u root -p

基本命令

-- 显示所有数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE mydb;

-- 使用数据库
USE mydb;

-- 创建表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入数据
INSERT INTO users (username, email) 
VALUES ('john_doe', 'john@example.com');

-- 查询数据
SELECT * FROM users WHERE id = 1;

-- 更新数据
UPDATE users SET email = 'new@example.com' WHERE id = 1;

-- 删除数据
DELETE FROM users WHERE id = 1;

二、SQL 核心语法

1. 查询进阶

-- 条件查询
SELECT * FROM products WHERE price > 100 AND stock > 0;

-- 排序
SELECT * FROM users ORDER BY created_at DESC;

-- 分页
SELECT * FROM products LIMIT 10 OFFSET 20;  -- 第3页,每页10条

-- 聚合函数
SELECT 
    COUNT(*) as total_users,
    AVG(age) as avg_age
FROM users;

-- 分组统计
SELECT 
    department, 
    COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;

2. 表关系与连接

-- 一对多关系
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    amount DECIMAL(10,2),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 多表连接查询
SELECT 
    u.username, 
    o.order_date, 
    o.amount
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.country = 'USA';

-- 多对多关系(通过中间表)
CREATE TABLE user_roles (
    user_id INT,
    role_id INT,
    PRIMARY KEY (user_id, role_id),
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (role_id) REFERENCES roles(id)
);

三、数据库设计与优化

1. 索引优化

-- 创建索引
CREATE INDEX idx_email ON users(email);

-- 复合索引
CREATE INDEX idx_name_age ON employees(last_name, age);

-- 查看索引使用情况
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

2. 数据类型选择

数据类型使用场景
INT整数ID、年龄等
VARCHAR(n)变长字符串(用户名、地址)
TEXT长文本(文章内容)
DECIMAL(m,n)精确小数(金额)
DATETIME日期时间(精确到秒)
BOOLEAN使用TINYINT(1)替代

3. 范式与反范式

  • 第三范式(3NF)​​:消除传递依赖
  • 反范式设计​:适当冗余提升查询性能(如订单表存储用户名)

四、高级特性

1. 存储过程与函数

DELIMITER //
CREATE PROCEDURE get_employee_count(IN dept VARCHAR(50), OUT count INT)
BEGIN
    SELECT COUNT(*) INTO count FROM employees WHERE department = dept;
END //
DELIMITER ;

-- 调用
CALL get_employee_count('Sales', @count);
SELECT @count;

2. 触发器

CREATE TRIGGER update_timestamp
BEFORE UPDATE ON products
FOR EACH ROW
SET NEW.updated_at = NOW();

3. 事务控制

START TRANSACTION;
INSERT INTO orders (user_id, amount) VALUES (1, 99.99);
UPDATE accounts SET balance = balance - 99.99 WHERE user_id = 1;
COMMIT;  -- 或 ROLLBACK 回滚

五、性能调优

1. 配置优化

# my.cnf 关键配置
[mysqld]
innodb_buffer_pool_size = 4G  # 通常设为物理内存的70-80%
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 0  # MySQL 8.0已移除

2. 慢查询分析

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

-- 查看慢查询
SELECT * FROM mysql.slow_log;

3. 分库分表策略

  • 垂直分表​:将大字段拆分到单独表
  • 水平分表​:按时间/ID范围拆分(如users_2023)

六、安全与备份

1. 用户权限管理

-- 创建用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'secure_password';

-- 授权
GRANT SELECT, INSERT ON mydb.* TO 'app_user'@'%';

-- 撤销权限
REVOKE DELETE ON mydb.* FROM 'app_user'@'%';

2. 数据备份与恢复

# 逻辑备份(导出SQL)
mysqldump -u root -p mydb > backup.sql

# 物理备份(InnoDB)
# 使用Percona XtraBackup或MySQL Enterprise Backup

# 恢复数据
mysql -u root -p mydb < backup.sql

七、学习资源推荐

官方文档

书籍

  • 《高性能MySQL》(第4版)
  • 《MySQL技术内幕:InnoDB存储引擎》

在线练习

八、学习建议

  1. 从命令行开始​:先掌握mysql命令行工具
  2. 理解执行计划​:学会使用EXPLAIN分析查询
  3. 动手实验​:在测试环境尝试索引、事务等特性
  4. 监控生产环境​:使用Percona PMM或MySQL Enterprise Monitor

通过系统学习+实战练习,2-3个月可掌握MySQL核心技能,6个月左右能处理复杂优化场景。坚持在真实项目中实践,你会成为数据库领域的专家! 💪

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇