《JAVA八股真解》六、MySQL
#JAVA##JAVA面经##JAVA内推#
1. 数据库事务的 ACID 特性
ACID 是数据库事务的四大核心特性,确保数据的一致性、可靠性和完整性。
-
原子性(Atomicity)
- 事务中的所有操作必须全部成功或全部失败。
- 若任一操作失败,整个事务将回滚至初始状态,保证数据不被破坏。
-
一致性(Consistency)
- 事务执行前后,数据库必须从一个一致状态转换到另一个一致状态。
- 满足所有完整性约束,如主键唯一、外键关联等。
-
隔离性(Isolation)
- 多个并发事务之间互不干扰,每个事务的操作与其他事务隔离。
- 通过不同的隔离级别(读未提交、读已提交、可重复读、串行化)控制并发行为。
-
持久性(Durability)
- 一旦事务提交成功,其对数据库的修改将永久保存。
- 即使系统崩溃或重启,数据也不会丢失。
总结:ACID 特性共同保障了数据库事务的可靠性与一致性,是构建稳定系统的基石。
2. MySQL 存储引擎对比
| 特性 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | 支持 | 不支持 |
| 行锁/表锁 | 行级锁 | 表级锁 |
| 外键约束 | 支持 | 不支持 |
| 崩溃恢复 | 支持(基于日志) | 不支持 |
| 索引类型 | 聚集索引(主键即索引) | 非聚集索引(独立存储) |
| MVCC支持 | 支持 | 不支持 |
说明:
- InnoDB:默认存储引擎,支持事务、行级锁、外键,适合高并发写入场景。
- MyISAM:性能较高,但不支持事务和行锁,适用于只读或读多写少的场景。
选择建议:
- 一般项目优先使用 InnoDB。
- 如果是纯查询系统且无需事务支持,可考虑 MyISAM。
3. 数据库事务隔离级别
MySQL 提供四种事务隔离级别,按严格程度递增:
| 隔离级别 | 读未提交(READ UNCOMMITTED) | 读已提交(READ COMMITTED) | 可重复读(REPEATABLE READ) | 串行化(SERIALIZABLE) |
|---|---|---|---|---|
| 脏读 | ✅ | ❌ | ❌ | ❌ |
| 不可重复读 | ✅ | ✅ | ❌ | ❌ |
| 幻读 | ✅ | ✅ | ✅ | ❌ |
解释:
- 脏读:读取未提交的数据。
- 不可重复读:同一事务中多次读取结果不一致。
- 幻读:新增或删除记录导致查询结果变化。
默认隔离级别:InnoDB 默认为
REPEATABLE READ,MyISAM 不支持事务,因此无此概念。
生产环境建议:
- 通常使用
READ COMMITTED或REPEATABLE READ。 SERIALIZABLE性能较差,仅在极端一致性要求下使用。
4. 索引的类型(种类)
MySQL 中常见的索引类型包括:
-
普通索引(Normal Index):
- 最基本的索引,允许重复值。
- 用于加速查询,但无唯一性约束。
-
唯一索引(Unique Index):
- 索引列值必须唯一,不允许重复。
- 常用于邮箱、手机号等字段。
-
主键索引(Primary Key Index):
- 一种特殊的唯一索引,不允许 NULL。
- 每张表只能有一个主键索引。
-
组合索引(Composite Index):
- 在多个列上创建的索引,提高多条件查询效率。
- 遵循“最左前缀原则”。
-
全文索引(Full-text Index):
- 用于文本内容的模糊搜索,如搜索引擎。
- 仅支持
MyISAM和InnoDB(5.6+)。
-
空间索引(Spatial Index):
- 用于地理空间数据,如经纬度坐标
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【八股真解】精炼最新高频面经 文章被收录于专栏
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

查看25道真题和解析