MySQL面试题大全

MySQL面试题大全

一、基础概念与数据类型

1.1 MySQL架构组成

MySQL采用典型的C/S架构,主要包含:

  • 连接池组件
  • SQL接口组件
  • 查询分析器
  • 优化器
  • 缓存组件
  • 插件式存储引擎
  • 物理文件

1.2 常用数据类型

-- 数值类型
INT(11)            -- 整型
DECIMAL(10,2)      -- 精确小数
FLOAT(8,3)         -- 单精度浮点

-- 字符串类型
VARCHAR(255)       -- 可变长度字符串
CHAR(10)           -- 定长字符串
TEXT               -- 长文本数据

-- 时间类型
DATETIME           -- 日期时间(精度到秒)
TIMESTAMP          -- 时间戳(自动更新)
DATE               -- 日期

二、索引与性能优化

2.1 B+树索引原理

$$ \begin{aligned} &\text{B+树特点:}\ &1. \text{非叶子节点仅存储键值}\ &2. \text{叶子节点形成有序链表}\ &3. \text{所有数据存储在叶子节点} \end{aligned} $$

2.2 索引创建示例

-- 创建普通索引
CREATE INDEX idx_name ON users(last_name);

-- 创建联合索引
ALTER TABLE orders ADD INDEX idx_cust_date (customer_id, order_date);

-- 查看索引使用情况
EXPLAIN SELECT * FROM products WHERE price > 100;

2.3 索引优化策略

  1. 最左前缀原则应用
  2. 避免在索引列上使用函数
  3. 区分度高的列适合建索引
  4. 使用覆盖索引减少IO

三、事务与锁机制

3.1 ACID特性实现

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT;

3.2 隔离级别对比

隔离级别脏读不可重复读幻读锁机制
READ UNCOMMITTED无锁
READ COMMITTED×行级锁
REPEATABLE READ××Gap锁
SERIALIZABLE×××表级锁

四、存储引擎对比

4.1 InnoDB vs MyISAM

特性InnoDBMyISAM
事务支持×
行级锁×(表锁)
外键约束×
崩溃恢复支持不支持
存储文件.ibd.MYD/.MYI

五、SQL优化实战

5.1 分页查询优化

-- 低效写法
SELECT * FROM logs ORDER BY create_time DESC LIMIT 1000000, 10;

-- 优化写法(使用覆盖索引)
SELECT * FROM logs 
WHERE id > (SELECT id FROM logs ORDER BY create_time DESC LIMIT 1000000, 1)
ORDER BY create_time DESC 
LIMIT 10;

5.2 慢查询日志分析

# 配置my.cnf
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

# 使用mysqldumpslow分析
mysqldumpslow -t 10 -s at /var/log/mysql/slow.log

六、主从复制配置

6.1 配置步骤

  1. 主库配置:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=row

  1. 创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

  1. 从库配置:
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;

七、分库分表方案

7.1 分片策略对比

策略类型优点缺点
范围分片易于扩展数据分布不均
哈希分片数据分布均匀扩容困难
一致性哈希扩容影响小实现复杂

7.2 MyCat分表示例

<!-- schema.xml配置 -->
<table name="orders" dataNode="dn1,dn2" rule="mod-long"/>
<dataNode name="dn1" dataHost="host1" database="db1" />
<dataNode name="dn2" dataHost="host2" database="db2" />

八、高可用方案

8.1 MHA架构

应用程序 → VIP
        ↓
Master → Slave1(候选主)
        ↓
Slave2 → Slave3

8.2 故障转移流程

  1. 检测主库故障
  2. 选择最新从库
  3. 提升为新的主库
  4. 其他从库切换复制源
  5. 应用连接新主库

九、安全与权限管理

9.1 权限授予示例

-- 创建只读用户
CREATE USER 'reader'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT SELECT ON sales.* TO 'reader'@'%';

-- 查看权限
SHOW GRANTS FOR 'reader'@'%';

9.2 SQL注入防护

  1. 使用预处理语句:
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

  1. 输入验证过滤
  2. 最小权限原则
  3. 定期漏洞扫描

十、新特性解析

10.1 窗口函数应用

SELECT 
    department_id,
    employee_name,
    salary,
    RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank
FROM employees;

10.2 JSON类型操作

-- 创建JSON字段
CREATE TABLE product (
    id INT PRIMARY KEY,
    specs JSON
);

-- 查询JSON字段
SELECT specs->'$.dimensions.width' 
FROM product 
WHERE specs->'$.color' = 'red';

(后续章节包含:查询缓存优化、死锁处理方案、备份恢复策略、性能监控工具使用等深度内容)

附录:经典设计题

场景:设计电商订单系统

  1. 分表策略:按用户ID哈希分库
  2. 索引设计:复合索引(user_id, order_status)
  3. 读写分离:写主库,读从库
  4. 数据归档:3个月前订单转历史表
  5. 缓存策略:热点订单数据Redis缓存

以上为部分核心内容展示,完整版包含超过50个典型面试问题解析、100+代码示例及详细原理说明,满足高级开发者和DBA岗位的面试准备需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值