# MySQL 常考语句分类整理
# 一、数据查询(SELECT)
| 类型 | 示例 |
|---|---|
| 基础查询 | SELECT * FROM users; |
| 指定列 | SELECT id, name FROM users; |
| 条件查询 | SELECT * FROM users WHERE age > 25; |
| 排序 | SELECT * FROM users ORDER BY age DESC; |
| 去重 | SELECT DISTINCT city FROM users; |
| 分页 | SELECT * FROM users LIMIT 10 OFFSET 20; |
| 别名 | SELECT name AS username FROM users; |
| 模糊匹配 | SELECT * FROM users WHERE name LIKE 'A%'; |
| 范围查询 | SELECT * FROM users WHERE age BETWEEN 20 AND 30; |
| 多条件 | SELECT * FROM users WHERE age > 20 AND city = 'Beijing'; |
# 二、多表操作(连接与子查询)
| 类型 | 示例 |
|---|---|
| 内连接 | SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.user_id; |
| 左连接 | SELECT u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id; |
| 右连接 | SELECT u.name, o.amount FROM users u RIGHT JOIN orders o ON u.id = o.user_id; |
| 子查询(WHERE中) | SELECT name FROM users WHERE id IN (SELECT user_id FROM orders); |
| 子查询(FROM中) | SELECT t.user_id, COUNT(*) FROM (SELECT * FROM orders WHERE amount > 100) t GROUP BY t.user_id; |
# 三、聚合与分组
| 类型 | 示例 |
|---|---|
| 总数 | SELECT COUNT(*) FROM users; |
| 求和 | SELECT SUM(amount) FROM orders; |
| 平均值 | SELECT AVG(age) FROM users; |
| 最大/最小值 | SELECT MAX(age), MIN(age) FROM users; |
| 分组统计 | SELECT city, COUNT(*) FROM users GROUP BY city; |
| 分组条件 | SELECT city, COUNT(*) FROM users GROUP BY city HAVING COUNT(*) > 10; |
# 四、数据更新与写入
| 类型 | 示例 |
|---|---|
| 插入 | INSERT INTO users(name, age) VALUES('Alice', 30); |
| 批量插入 | INSERT INTO users(name, age) VALUES ('Bob', 25), ('Cathy', 22); |
| 插入或更新 | INSERT INTO users(id, name) VALUES (1, 'Tom') ON DUPLICATE KEY UPDATE name='Tom'; |
| 更新数据 | UPDATE users SET age = 28 WHERE id = 1; |
| 删除数据 | DELETE FROM users WHERE age < 18; |
# 五、索引与性能优化相关
| 类型 | 示例 |
|---|---|
| 查看索引 | SHOW INDEX FROM users; |
| 创建索引 | CREATE INDEX idx_age ON users(age); |
| 删除索引 | DROP INDEX idx_age ON users; |
| 使用执行计划 | EXPLAIN SELECT * FROM users WHERE age > 30; |
| 查看慢查询日志 | SHOW VARIABLES LIKE 'slow_query_log%'; |
| 强制使用索引 | SELECT * FROM users FORCE INDEX (idx_age) WHERE age > 25; |
# 六、事务与锁操作
| 类型 | 示例 |
|---|---|
| 开启事务 | START TRANSACTION; 或 BEGIN; |
| 提交事务 | COMMIT; |
| 回滚事务 | ROLLBACK; |
| 设置隔离级别 | SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; |
| 查看当前隔离级别 | SELECT @@tx_isolation; |
| 悲观锁 | SELECT * FROM users WHERE id = 1 FOR UPDATE; |
| 乐观锁 | UPDATE users SET age = 26, version = version + 1 WHERE id = 1 AND version = 2; |
# Bonus:面试高频场景题
| 问题 | 示例 |
|---|---|
| 查询每个用户的最后一笔订单 | 使用 GROUP BY + MAX(order_time) 或 子查询 + JOIN |
| 查询重复数据 | SELECT name, COUNT(*) FROM users GROUP BY name HAVING COUNT(*) > 1; |
| 查询某字段为空 | SELECT * FROM users WHERE phone IS NULL; |
| 查询某天注册的用户 | SELECT * FROM users WHERE DATE(register_time) = '2024-01-01'; |
| 分页优化 | SELECT * FROM users WHERE id > ? LIMIT 10; 替代 OFFSET |
评论
验证登录状态...