一、数据库设计基础
-
数据库三大范式是什么?
- 第一范式:确保每列的原子性,不可再拆分1。
- 第二范式:在满足第一范式的基础上,消除非主键列对主键的部分依赖1。
- 第三范式:在满足第二范式的基础上,消除非主键列之间的传递依赖1。
- 应用原则:优先遵循范式,但允许为性能妥协(如冗余设计)12。
-
varchar与char的区别?
varchar为变长字符串,存储时按实际长度分配空间;char为定长字符串,固定占用指定字节,适合长度固定的字段26。
二、事务与并发控制
-
事务的ACID特性是什么?
- 原子性:事务要么全部成功,要么全部失败回滚。
- 一致性:事务执行前后数据库状态合法。
- 隔离性:并发事务互不干扰。
- 持久性:事务提交后数据永久存储。
-
事务隔离级别及并发问题
- 读未提交:可能脏读、不可重复读、幻读。
- 读提交:解决脏读。
- 可重复读(MySQL默认) :解决脏读、不可重复读,部分幻读。
- 串行化:完全隔离,但性能最低。
三、SQL优化与索引
-
回表操作是什么?如何减少回表?
-
定义:通过非主键索引查询时,需回主键索引获取完整数据。
-
优化方法:
- 使用覆盖索引(包含查询所需字段)。
- 减少
SELECT *,仅查询必要字段。
-
-
内连接、左连接、右连接的区别?
- 内连接(INNER JOIN) :仅返回匹配的行。
- 左连接(LEFT JOIN) :返回左表所有行,右表不匹配则为NULL。
- 右连接(RIGHT JOIN) :返回右表所有行,左表不匹配则为NULL。
四、存储引擎与高级特性
-
InnoDB与MyISAM的区别?
- 事务支持:InnoDB支持ACID事务,MyISAM不支持。
- 锁机制:InnoDB支持行级锁;MyISAM仅表级锁。
- 适用场景:InnoDB适合高并发写;MyISAM适合读多写少。
-
如何存储Emoji表情?
- 使用
utf8mb4字符集,支持4字节编码(如CHARACTER SET utf8mb4)。
- 使用
五、运维与扩展
-
MySQL主从复制原理?
- 核心流程:主库记录binlog,从库通过IO线程拉取并写入relay log,SQL线程重放日志实现数据同步。
-
分库分表常见方案?
- 垂直分表:按业务拆分字段到不同表6。
- 水平分库分表:按规则(如哈希、范围)拆分数据到多个库/表。