MySQL 是一个流行的开源关系型数据库管理系统,广泛应用于 Web 开发。以下是 MySQL 从安装到基本理解的完整指南:
一、MySQL 安装
Windows 系统安装
下载安装包
- 访问 MySQL 官网 (dev.mysql.com)
- 下载 MySQL Community Server
- 选择 Windows (x86, 64-bit) MSI Installer
安装步骤
# 1. 运行安装程序
# 2. 选择安装类型:Developer Default(推荐)
# 3. 配置 MySQL Server
# - 设置 root 密码
# - 配置服务名称和端口(默认3306)
# 4. 完成安装
Linux 系统安装(Ubuntu/Debian)
# 更新包列表
sudo apt update
# 安装 MySQL
sudo apt install mysql-server
# 启动 MySQL 服务
sudo systemctl start mysql
# 设置开机启动
sudo systemctl enable mysql
# 安全配置
sudo mysql_secure_installation
macOS 安装
# 使用 Homebrew 安装
brew install mysql
# 启动 MySQL 服务
brew services start mysql
# 初始化安全设置
mysql_secure_installation
二、MySQL 基础概念
1. 数据库结构层次
数据库实例 → 数据库 → 表 → 行(记录) → 字段(列)
2. 数据类型
- 数值类型:INT, DECIMAL, FLOAT, DOUBLE
- 字符串类型:CHAR, VARCHAR, TEXT
- 日期时间:DATE, DATETIME, TIMESTAMP
- 其他:BLOB, ENUM, SET
三、基本操作
1. 连接 MySQL
-- 命令行连接
mysql -u root -p
-- 连接指定主机和端口
mysql -h localhost -P 3306 -u root -p
2. 数据库操作
-- 显示所有数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE test_db;
-- 使用数据库
USE test_db;
-- 删除数据库
DROP DATABASE test_db;
3. 表操作
-- 创建表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT DEFAULT 18,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 显示表结构
DESCRIBE users;
-- 修改表
ALTER TABLE users ADD COLUMN phone VARCHAR(15);
-- 删除表
DROP TABLE users;
4. 数据操作(CRUD)
-- 插入数据
INSERT INTO users (username, email, age)
VALUES ('张三', 'zhangsan@example.com', 25);
-- 查询数据
SELECT * FROM users;
SELECT username, email FROM users WHERE age > 20;
-- 更新数据
UPDATE users SET age = 26 WHERE username = '张三';
-- 删除数据
DELETE FROM users WHERE id = 1;
四、高级查询
1. 条件查询
SELECT * FROM users
WHERE age BETWEEN 20 AND 30
AND email LIKE '%@example.com'
ORDER BY created_at DESC
LIMIT 10;
2. 聚合函数
-- 统计、求和、平均值等
SELECT
COUNT(*) as total_users,
AVG(age) as avg_age,
MAX(age) as max_age,
MIN(age) as min_age
FROM users;
3. 分组查询
SELECT
age_group,
COUNT(*) as user_count
FROM (
SELECT
CASE
WHEN age < 20 THEN '青少年'
WHEN age BETWEEN 20 AND 30 THEN '青年'
ELSE '成年'
END as age_group
FROM users
) as grouped
GROUP BY age_group;
4. 连接查询
-- 创建订单表
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
amount DECIMAL(10,2),
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 内连接
SELECT
u.username,
o.amount,
o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- 左连接
SELECT
u.username,
COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id;
五、索引优化
1. 创建索引
-- 单列索引
CREATE INDEX idx_email ON users(email);
-- 复合索引
CREATE INDEX idx_age_created ON users(age, created_at);
-- 唯一索引
CREATE UNIQUE INDEX idx_unique_username ON users(username);
2. 查看索引
SHOW INDEX FROM users;
-- 分析查询性能
EXPLAIN SELECT * FROM users WHERE age > 25;
六、事务管理
-- 开始事务
START TRANSACTION;
-- 执行操作
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
-- 提交或回滚
COMMIT; -- 确认更改
-- ROLLBACK; -- 撤销更改
七、存储过程
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE GetUserCount()
BEGIN
SELECT COUNT(*) as total FROM users;
END //
DELIMITER ;
-- 调用存储过程
CALL GetUserCount();
八、备份与恢复
备份数据库
# 备份整个数据库
mysqldump -u root -p test_db > backup.sql
# 备份指定表
mysqldump -u root -p test_db users > users_backup.sql
恢复数据库
# 恢复数据库
mysql -u root -p test_db < backup.sql
九、安全配置
1. 用户管理
-- 创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
-- 授予权限
GRANT SELECT, INSERT ON test_db.* TO 'newuser'@'localhost';
-- 查看权限
SHOW GRANTS FOR 'newuser'@'localhost';
-- 撤销权限
REVOKE INSERT ON test_db.* FROM 'newuser'@'localhost';
2. 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
十、性能优化建议
使用合适的数据类型
合理设计索引
**避免 SELECT ***
使用 EXPLAIN 分析查询
定期优化表
配置合适的缓存大小
学习资源推荐
官方文档:dev.mysql.com/doc/
在线练习:SQLZoo, LeetCode Database
书籍推荐:
实践项目建议
设计一个博客系统的数据库
创建电商网站的数据表结构
实现用户权限管理系统
设计数据分析报表的查询语句
这个学习路线涵盖了 MySQL 的核心内容。建议按照顺序学习,从基础操作开始,逐步深入高级功能。实践是最好的学习方式,多动手编写 SQL 语句,解决实际问题。