MySQL 高频面试问答
# 📌 MySQL 高频面试问答
适合人群:准备MySQL面试的开发者、数据库学习者
问题类型:基础概念、性能优化、索引设计、高并发处理
标签:FAQ - 快速回顾高频问题
# 📖 目录
# 🎯 基础概念
# Q1: MySQL 的存储引擎有哪些?有什么区别?
回答要点:
| 存储引擎 | 特点 | 适用场景 | 优缺点 |
|---|---|---|---|
| InnoDB | 支持事务、外键、行级锁 | OLTP、高并发 | ✅ 事务安全、崩溃恢复 ❌ 相对较慢 |
| MyISAM | 不支持事务、表级锁 | 读多写少、数据仓库 | ✅ 查询速度快 ❌ 不支持事务 |
| Memory | 数据存储在内存中 | 临时表、缓存 | ✅ 速度极快 ❌ 数据易丢失 |
| Archive | 高压缩比 | 日志存储、归档 | ✅ 压缩比高 ❌ 只支持插入查询 |
代码示例:
-- 查看当前存储引擎
SHOW ENGINES;
-- 创建表时指定存储引擎
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=InnoDB;
-- 修改表的存储引擎
ALTER TABLE users ENGINE=MyISAM;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# Q2: MySQL 的索引类型有哪些?
回答要点:
# 1. 按数据结构分类
-- 1. B+Tree 索引(默认)
CREATE INDEX idx_name ON users(name);
-- 2. Hash 索引(Memory引擎)
CREATE TABLE hash_table (
id INT,
name VARCHAR(50)
) ENGINE=MEMORY;
CREATE INDEX idx_hash ON hash_table(name) USING HASH;
-- 3. 全文索引
CREATE FULLTEXT INDEX idx_content ON articles(content);
-- 4. 空间索引
CREATE SPATIAL INDEX idx_location ON places(location);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 2. 按功能分类
-- 主键索引
CREATE TABLE users (
id INT PRIMARY KEY, -- 自动创建主键索引
name VARCHAR(50)
);
-- 唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);
-- 普通索引
CREATE INDEX idx_name ON users(name);
-- 复合索引
CREATE INDEX idx_name_age ON users(name, age);
-- 前缀索引
CREATE INDEX idx_name_prefix ON users(name(10));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Q3: 什么是聚簇索引和非聚簇索引?
回答要点:
# 聚簇索引(InnoDB)
- 定义:数据行的物理顺序与索引顺序相同
- 特点:一个表只能有一个聚簇索引
- 优势:查询速度快,范围查询效率高
-- InnoDB 的聚簇索引结构
CREATE TABLE users (
id INT PRIMARY KEY, -- 聚簇索引
name VARCHAR(50),
email VARCHAR(100)
);
-- 查询时直接通过聚簇索引找到数据
SELECT * FROM users WHERE id = 1; -- 最快
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 非聚簇索引(MyISAM)
- 定义:索引和数据分开存储
- 特点:可以有多个非聚簇索引
- 查询过程:索引 → 数据地址 → 数据
-- MyISAM 的非聚簇索引结构
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
) ENGINE=MyISAM;
-- 查询时需要回表
SELECT * FROM users WHERE name = 'John'; -- 需要回表查询
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 📊 索引设计
# Q4: 如何设计高效的索引?
回答要点:
# 1. 索引设计原则
-- ✅ 好的索引设计
-- 1. 选择性高的列放在前面
CREATE INDEX idx_user_status_created ON orders(user_id, status, created_at);
-- 2. 覆盖索引,避免回表
CREATE INDEX idx_user_name_email ON users(user_id, name, email);
SELECT name, email FROM users WHERE user_id = 1; -- 不需要回表
-- 3. 前缀索引节省空间
CREATE INDEX idx_name_prefix ON users(name(10));
-- ❌ 避免的索引设计
-- 1. 过多索引影响写入性能
-- 2. 重复索引
-- 3. 未使用的索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 2. 复合索引最左前缀原则
-- 创建复合索引
CREATE INDEX idx_name_age_city ON users(name, age, city);
-- ✅ 能使用索引的查询
SELECT * FROM users WHERE name = 'John';
SELECT * FROM users WHERE name = 'John' AND age = 25;
SELECT * FROM users WHERE name = 'John' AND age = 25 AND city = 'NYC';
-- ❌ 不能使用索引的查询
SELECT * FROM users WHERE age = 25; -- 跳过了 name
SELECT * FROM users WHERE city = 'NYC'; -- 跳过了 name, age
SELECT * FROM users WHERE age = 25 AND city = 'NYC'; -- 跳过了 name
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 3. 索引优化技巧
-- 1. 使用 EXPLAIN 分析查询计划
EXPLAIN SELECT * FROM users WHERE name = 'John' AND age = 25;
-- 2. 避免在索引列上使用函数
-- ❌ 错误
SELECT * FROM users WHERE UPPER(name) = 'JOHN';
-- ✅ 正确
SELECT * FROM users WHERE name = 'John';
-- 3. 避免使用 NOT、!=、<> 等操作符
-- ❌ 错误
SELECT * FROM users WHERE status != 'active';
-- ✅ 正确
SELECT * FROM users WHERE status IN ('pending', 'inactive');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Q5: 每天新增100万数据,表应该怎么设计?
回答要点:
# 背景分析
业务场景
- 订单量:每天新增100万数据
- 查询需求:根据订单ID查询、根据用户ID查询订单列表
- 字段:订单ID、用户ID、订单金额、创建时间
# 设计方案
1. 表结构设计
-- 订单表设计
CREATE TABLE orders (
order_id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status TINYINT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-- 索引设计
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at),
INDEX idx_user_created (user_id, created_at)
) ENGINE=InnoDB;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
2. 分区策略
-- 按时间分区(按月分区)
CREATE TABLE orders_partitioned (
order_id BIGINT AUTO_INCREMENT,
user_id BIGINT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (order_id, created_at),
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB
PARTITION BY RANGE (YEAR(created_at) * 100 + MONTH(created_at)) (
PARTITION p202401 VALUES LESS THAN (202402),
PARTITION p202402 VALUES LESS THAN (202403),
PARTITION p202403 VALUES LESS THAN (202404),
-- ... 更多分区
PARTITION p_future VALUES LESS THAN MAXVALUE
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
3. 分库分表策略
-- 按用户ID分表(取模分表)
-- 表名:orders_0, orders_1, orders_2, orders_3
CREATE TABLE orders_0 (
order_id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB;
-- 分表路由逻辑(应用层)
-- table_suffix = user_id % 4
-- table_name = "orders_" + table_suffix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4. 读写分离
-- 主库:处理写操作
-- 从库:处理读操作
-- 配置示例
-- 主库配置
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
-- 从库配置
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read-only = 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# ⚡ 性能优化
# Q6: 如何优化慢查询?
回答要点:
# 1. 慢查询分析
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 超过2秒的查询记录
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2. 使用 EXPLAIN 分析
-- 分析查询计划
EXPLAIN SELECT u.name, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.status = 1 AND o.created_at >= '2024-01-01';
-- 关键字段说明
-- type: ALL(全表扫描) < index(索引扫描) < range(范围扫描) < ref(索引查找) < const(常量)
-- key: 使用的索引
-- rows: 扫描的行数
-- Extra: 额外信息
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3. 常见优化技巧
-- 1. 避免 SELECT *
SELECT id, name, email FROM users; -- ✅ 只查询需要的字段
-- 2. 使用 LIMIT 限制结果集
SELECT * FROM orders ORDER BY created_at DESC LIMIT 10;
-- 3. 优化 JOIN 查询
-- ❌ 错误:笛卡尔积
SELECT * FROM users, orders WHERE users.id = orders.user_id;
-- ✅ 正确:使用 JOIN
SELECT u.name, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
-- 4. 使用 EXISTS 替代 IN(大数据集)
-- ❌ 错误
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
-- ✅ 正确
SELECT * FROM users u WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Q7: 如何优化 MySQL 配置?
回答要点:
# 1. 内存配置优化
# my.cnf 配置示例
[mysqld]
# 缓冲池大小(总内存的70-80%)
innodb_buffer_pool_size = 2G
# 查询缓存
query_cache_type = 1
query_cache_size = 256M
# 连接数
max_connections = 500
max_connect_errors = 1000
# 临时表大小
tmp_table_size = 64M
max_heap_table_size = 64M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2. 存储引擎优化
# InnoDB 优化
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
1
2
3
4
5
6
2
3
4
5
6
# 3. 监控和调优
-- 查看当前配置
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'max_connections';
-- 查看状态信息
SHOW STATUS LIKE 'Innodb_buffer_pool_hit_rate';
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Qcache_hits';
-- 查看进程列表
SHOW PROCESSLIST;
-- 杀死慢查询
KILL QUERY 12345;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 🚀 高并发处理
# Q8: 如何处理高并发读写?
回答要点:
# 1. 读写分离
-- 主从复制配置
-- 主库(写)
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
-- 从库(读)
START SLAVE;
SHOW SLAVE STATUS\G;
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 2. 连接池配置
// Java 连接池配置示例
@Configuration
public class DatabaseConfig {
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("username");
config.setPassword("password");
// 连接池配置
config.setMaximumPoolSize(20); // 最大连接数
config.setMinimumIdle(5); // 最小空闲连接
config.setConnectionTimeout(30000); // 连接超时
config.setIdleTimeout(600000); // 空闲超时
config.setMaxLifetime(1800000); // 最大生命周期
return new HikariDataSource(config);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 3. 缓存策略
-- 1. 查询缓存
SET GLOBAL query_cache_type = ON;
SET GLOBAL query_cache_size = 256M;
-- 2. 应用层缓存(Redis)
-- 热点数据缓存
SET user:123 '{"id":123,"name":"John","email":"[email protected]"}' EX 3600
-- 3. 缓存更新策略
-- Cache-Aside 模式
-- 1. 查询:先查缓存,缓存未命中则查数据库,然后更新缓存
-- 2. 更新:先更新数据库,然后删除缓存
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# Q9: 如何处理数据库连接池耗尽?
回答要点:
# 1. 连接池监控
-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Max_used_connections';
-- 查看连接详情
SHOW PROCESSLIST;
-- 查看连接配置
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 2. 连接池优化
# 连接池配置优化
[mysqld]
# 增加最大连接数
max_connections = 1000
# 减少连接超时时间
wait_timeout = 300
interactive_timeout = 300
# 启用连接压缩
protocol_compression = ON
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 3. 应用层优化
// 连接池配置优化
public class OptimizedDataSource {
public DataSource createDataSource() {
HikariConfig config = new HikariConfig();
// 连接池大小优化
config.setMaximumPoolSize(50); // 根据服务器性能调整
config.setMinimumIdle(10); // 保持最小连接数
// 连接验证
config.setConnectionTestQuery("SELECT 1");
config.setValidationTimeout(3000);
// 连接泄漏检测
config.setLeakDetectionThreshold(60000);
// 连接超时配置
config.setConnectionTimeout(20000);
config.setIdleTimeout(300000);
config.setMaxLifetime(1200000);
return new HikariDataSource(config);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 🔒 事务与锁
# Q10: MySQL 事务隔离级别有哪些?
回答要点:
# 1. 隔离级别对比
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 性能 |
|---|---|---|---|---|
| READ UNCOMMITTED | ❌ 可能 | ❌ 可能 | ❌ 可能 | ⚡ 最快 |
| READ COMMITTED | ✅ 避免 | ❌ 可能 | ❌ 可能 | ⚡ 快 |
| REPEATABLE READ | ✅ 避免 | ✅ 避免 | ❌ 可能 | 🐌 较慢 |
| SERIALIZABLE | ✅ 避免 | ✅ 避免 | ✅ 避免 | 🐌 最慢 |
# 2. 隔离级别示例
-- 查看当前隔离级别
SELECT @@transaction_isolation;
-- 设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 事务示例
START TRANSACTION;
SELECT * FROM users WHERE id = 1; -- 第一次查询
-- 其他事务修改了 id=1 的数据
SELECT * FROM users WHERE id = 1; -- 第二次查询(可能结果不同)
COMMIT;
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 3. 锁机制
-- 1. 行锁(InnoDB)
START TRANSACTION;
SELECT * FROM users WHERE id = 1 FOR UPDATE; -- 排他锁
-- 其他事务无法修改 id=1 的记录
COMMIT;
-- 2. 表锁(MyISAM)
LOCK TABLES users WRITE;
SELECT * FROM users;
UNLOCK TABLES;
-- 3. 间隙锁(防止幻读)
START TRANSACTION;
SELECT * FROM users WHERE age BETWEEN 20 AND 30 FOR UPDATE;
-- 防止其他事务插入 age 在 20-30 之间的记录
COMMIT;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 💼 实际应用场景
# Q11: 电商系统数据库设计
回答要点:
# 1. 核心表设计
-- 用户表
CREATE TABLE users (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
phone VARCHAR(20),
status TINYINT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_username (username),
INDEX idx_email (email),
INDEX idx_phone (phone)
) ENGINE=InnoDB;
-- 商品表
CREATE TABLE products (
product_id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0,
category_id INT,
status TINYINT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_name (name),
INDEX idx_category (category_id),
INDEX idx_price (price),
INDEX idx_status (status)
) ENGINE=InnoDB;
-- 订单表
CREATE TABLE orders (
order_id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status TINYINT DEFAULT 1,
payment_status TINYINT DEFAULT 0,
shipping_address TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_status (status),
INDEX idx_created_at (created_at),
INDEX idx_user_created (user_id, created_at),
FOREIGN KEY (user_id) REFERENCES users(user_id)
) ENGINE=InnoDB;
-- 订单详情表
CREATE TABLE order_items (
item_id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
INDEX idx_order_id (order_id),
INDEX idx_product_id (product_id),
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
) ENGINE=InnoDB;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 2. 分库分表策略
-- 按用户ID分表
-- 订单表分表:orders_0, orders_1, orders_2, orders_3
CREATE TABLE orders_0 (
order_id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status TINYINT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB;
-- 分表路由逻辑
-- table_suffix = user_id % 4
-- table_name = "orders_" + table_suffix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 3. 缓存策略
-- 热点数据缓存
-- 1. 商品信息缓存
-- Redis: product:123 -> {"id":123,"name":"iPhone","price":999.99}
-- 2. 用户信息缓存
-- Redis: user:456 -> {"id":456,"username":"john","email":"[email protected]"}
-- 3. 购物车缓存
-- Redis: cart:456 -> [{"product_id":123,"quantity":2}]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 📚 学习建议
# 如何准备 MySQL 面试?
- 掌握基础概念:存储引擎、索引类型、事务隔离级别
- 熟悉性能优化:慢查询分析、索引设计、配置优化
- 了解高并发处理:读写分离、分库分表、缓存策略
- 实践项目经验:能够结合实际业务场景设计数据库方案
- 关注最新特性:MySQL 8.0 新特性、云数据库解决方案
# 面试技巧
- 结构化回答:问题分析 → 解决方案 → 代码示例
- 举一反三:从一个问题延伸到相关知识点
- 实战经验:结合项目实际遇到的问题和解决方案
- 性能意识:始终考虑性能影响和优化方案
# 🎯 总结
这份 FAQ 覆盖了 MySQL 面试的核心考点:
- ✅ 基础概念:存储引擎、索引类型、事务隔离级别
- ✅ 索引设计:索引优化、复合索引、分区策略
- ✅ 性能优化:慢查询分析、配置优化、监控调优
- ✅ 高并发处理:读写分离、分库分表、连接池优化
- ✅ 事务与锁:隔离级别、锁机制、并发控制
- ✅ 实战经验:完整的数据库设计方案和代码示例
通过这些高频问题的准备,你将能够自信地应对 MySQL 相关的技术面试!🚀
上次更新: 2025/10/08, 16:24:59