Appearance
MySQL 数据库
🎯 场景:数据库操作入门
┌─────────────────────────────────────────────────────────────────┐
│ MySQL 数据库操作 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ -- 创建数据库 │
│ CREATE DATABASE mydb; │
│ │
│ -- 连接数据库 │
│ USE mydb; │
│ │
│ -- 创建表 │
│ CREATE TABLE users ( │
│ id INT PRIMARY KEY AUTO_INCREMENT, │
│ name VARCHAR(50) NOT NULL, │
│ age INT, │
│ email VARCHAR(100) │
│ ); │
│ │
│ -- 插入数据 │
│ INSERT INTO users (name, age, email) │
│ VALUES ('张三', 25, 'zhangsan@example.com'); │
│ │
│ -- 查询数据 │
│ SELECT * FROM users; │
│ │
└─────────────────────────────────────────────────────────────────┘这段代码告诉我们什么?
- MySQL 是关系型数据库,使用 SQL 语句操作
- 基本操作包括创建数据库、创建表、插入数据、查询数据
- 表结构包含字段定义、数据类型、约束条件
💡 实战场景:为什么需要数据库?
- 持久化存储数据,比内存更可靠
- 结构化管理数据,便于查询和维护
- 支持并发操作,多用户同时访问
- 提供事务支持,确保数据一致性
数据库基础
数据类型
MySQL 常用数据类型:
| 类型 | 描述 | 示例 |
|---|---|---|
| INT | 整数 | age INT |
| VARCHAR | 可变长度字符串 | name VARCHAR(50) |
| TEXT | 长文本 | description TEXT |
| DATE | 日期 | birthday DATE |
| DATETIME | 日期时间 | created_at DATETIME |
| DECIMAL | 精确小数 | price DECIMAL(10,2) |
| BOOLEAN | 布尔值 | active BOOLEAN |
💡 实战提示:选择合适的数据类型可以节省存储空间和提高查询性能!
约束条件
常用约束:
PRIMARY KEY- 主键,唯一标识AUTO_INCREMENT- 自增NOT NULL- 非空UNIQUE- 唯一FOREIGN KEY- 外键,关联其他表DEFAULT- 默认值
sql
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);SQL 查询
基础查询
sql
-- 查询所有字段
SELECT * FROM users;
-- 查询指定字段
SELECT name, age FROM users;
-- 带条件查询
SELECT * FROM users WHERE age > 18;
-- 排序
SELECT * FROM users ORDER BY age DESC;
-- 限制结果
SELECT * FROM users LIMIT 10;
-- 分页
SELECT * FROM users LIMIT 10 OFFSET 20;高级查询
sql
-- 聚合函数
SELECT COUNT(*) AS total_users FROM users;
SELECT AVG(age) AS avg_age FROM users;
SELECT MAX(age) AS max_age FROM users;
-- 分组
SELECT age, COUNT(*) AS count FROM users GROUP BY age;
-- 分组后过滤
SELECT age, COUNT(*) AS count FROM users GROUP BY age HAVING count > 1;
-- 多表关联
SELECT u.name, o.amount FROM users u
JOIN orders o ON u.id = o.user_id;
-- 子查询
SELECT * FROM users WHERE id IN (
SELECT user_id FROM orders WHERE amount > 100
);索引
索引类型
MySQL 索引类型:
PRIMARY KEY- 主键索引UNIQUE- 唯一索引INDEX- 普通索引FULLTEXT- 全文索引
创建索引
sql
-- 创建表时添加索引
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
INDEX idx_age (age)
);
-- 为现有表添加索引
CREATE INDEX idx_name ON users(name);
CREATE UNIQUE INDEX idx_email ON users(email);💡 面试点:索引的作用是什么?
- 加速数据查询
- 确保数据唯一性
- 提高排序和分组性能
⚠️ 注意:索引会增加写操作的开销,不要过度使用!
事务
事务特性
ACID 特性:
- Atomicity - 原子性:要么全部执行,要么全部回滚
- Consistency - 一致性:事务前后数据状态一致
- Isolation - 隔离性:事务之间互不干扰
- Durability - 持久性:事务提交后数据永久保存
事务操作
sql
-- 开始事务
START TRANSACTION;
-- 执行操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 提交事务
COMMIT;
-- 回滚事务
-- ROLLBACK;事务隔离级别
MySQL 隔离级别:
READ UNCOMMITTED- 读未提交READ COMMITTED- 读已提交REPEATABLE READ- 可重复读(默认)SERIALIZABLE- 串行化
sql
-- 设置隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;性能优化
慢查询优化
- 使用索引:为常用查询字段创建索引
- 避免全表扫描:使用 WHERE 子句过滤数据
- **避免 SELECT ***:只查询需要的字段
- 使用 LIMIT:限制返回结果数量
- 优化 JOIN:避免过多表关联
数据库设计优化
- 范式化:减少数据冗余
- 反范式化:适当冗余提高查询性能
- 分区表:大表分区提高管理和查询效率
- 分库分表:水平拆分和垂直拆分
配置优化
- 调整
innodb_buffer_pool_size(推荐为内存的 50-80%) - 调整
query_cache_size(查询缓存) - 调整
max_connections(最大连接数)
备份与恢复
备份
bash
-- 备份整个数据库
mysqldump -u root -p mydb > mydb_backup.sql
-- 备份指定表
mysqldump -u root -p mydb users orders > tables_backup.sql
-- 备份结构
mysqldump -u root -p --no-data mydb > structure.sql恢复
bash
-- 恢复数据库
mysql -u root -p mydb < mydb_backup.sql
-- 从备份文件中恢复数据
mysql -u root -p mydb
mysql> SOURCE mydb_backup.sql;常见问题
连接问题
- 检查网络连接
- 检查 MySQL 服务是否运行
- 检查用户名和密码
- 检查防火墙设置
性能问题
- 查看慢查询日志:
SHOW VARIABLES LIKE 'slow_query_log' - 分析查询执行计划:
EXPLAIN SELECT * FROM users WHERE age > 18 - 检查索引使用情况:
SHOW INDEX FROM users
数据问题
- 数据丢失:定期备份
- 数据损坏:使用
CHECK TABLE和REPAIR TABLE - 死锁:优化事务和查询
总结
MySQL 核心知识点:
| 知识点 | 面试频率 | 实战重要性 |
|---|---|---|
| SQL 基础 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 索引优化 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 事务处理 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 性能调优 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 备份恢复 | ⭐⭐⭐ | ⭐⭐⭐⭐ |
⚠️ 易错点提醒:
- 不要在生产环境中使用
SELECT * - 注意索引的使用场景,不要过度索引
- 事务要及时提交或回滚,避免长时间占用锁
- 定期备份数据库,防止数据丢失
- 注意 SQL 注入风险,使用参数化查询