《JAVA八股真解》六、MySQL

#JAVA##JAVA面经##JAVA内推#

1. 数据库事务的 ACID 特性

ACID 是数据库事务的四大核心特性,确保数据的一致性、可靠性和完整性。

  1. 原子性(Atomicity)

    • 事务中的所有操作必须全部成功或全部失败。
    • 若任一操作失败,整个事务将回滚至初始状态,保证数据不被破坏。
  2. 一致性(Consistency)

    • 事务执行前后,数据库必须从一个一致状态转换到另一个一致状态。
    • 满足所有完整性约束,如主键唯一、外键关联等。
  3. 隔离性(Isolation)

    • 多个并发事务之间互不干扰,每个事务的操作与其他事务隔离。
    • 通过不同的隔离级别(读未提交、读已提交、可重复读、串行化)控制并发行为。
  4. 持久性(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 COMMITTEDREPEATABLE READ
  • SERIALIZABLE 性能较差,仅在极端一致性要求下使用。

4. 索引的类型(种类)

MySQL 中常见的索引类型包括:

  • 普通索引(Normal Index)

    • 最基本的索引,允许重复值。
    • 用于加速查询,但无唯一性约束。
  • 唯一索引(Unique Index)

    • 索引列值必须唯一,不允许重复。
    • 常用于邮箱、手机号等字段。
  • 主键索引(Primary Key Index)

    • 一种特殊的唯一索引,不允许 NULL。
    • 每张表只能有一个主键索引。
  • 组合索引(Composite Index)

    • 在多个列上创建的索引,提高多条件查询效率。
    • 遵循“最左前缀原则”。
  • 全文索引(Full-text Index)

    • 用于文本内容的模糊搜索,如搜索引擎。
    • 仅支持 MyISAMInnoDB(5.6+)。
  • 空间索引(Spatial Index)

    • 用于地理空间数据,如经纬度坐标

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
接好运
点赞 回复 分享
发布于 03-07 12:58 广东
专栏目录https://www.nowcoder.com/share/jump/1772859327707
点赞 回复 分享
发布于 03-07 12:58 广东
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏。
点赞 回复 分享
发布于 03-06 15:51 广东
感觉八股总结的可以啊
点赞 回复 分享
发布于 03-05 18:55 北京

相关推荐

高标智能 后端开发面经1. 自我介绍2. 将java文件编译成class字节码加载到JVM,会先被解析到哪个区域3. 频繁Minor GC的排查与解决4. JVM内存区域中哪些是私有,哪些是共享5. 线程之间的通信方式,如何保证线程安全?6. 自定义类实例化时,会不会生成它父类 Object 的实例?为什么?7. Spring IOC 三级缓存是否完全解决了循环依赖问题?举例说明。8. Spring IOC 依赖注入的方式有哪些?————————————————————【我们是谁】👉二轮车电控的业界"大佬",市占率50%以上!👉热门出海赛道,ebike-三电系统新势力!----------🌍国际化平台,格局打开🚀全方位培养,火箭晋升【岗位需求】结构、仿真、电机、软件、硬件、测试、营销、制造等【岗位地点】总部位于东莞松山湖,工作地点遍布全国及海外【薪酬福利】💡五险一金、周末双休、带薪年假、报到礼金、食宿安排、节假日礼品等~💡薪酬待遇:研发类硕士21~35万/年,本科12-21万/年;非研发12-21万/年;派驻海外岗位额外补贴1.4万+/月!【内推链接】https://kjgb.zhiye.com/campus/jobs?shareId=cd54c7a7-9898-4abb-bd5e-a37952f5e425&shareSource=2&qr=1&memory=%7B%7D&silence=1【内推码】EVKM89内推投递,简历优先筛选,面试流程加快!
点赞 评论 收藏
分享
评论
4
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务