【Java-MySQL】主键、外键有什么区别?

【Java-MySQL】主键、外键有什么区别?

以下是主键(Primary Key)与外键(Foreign Key)的核心区别及适用场景的总结,结合最新数据库实践整理:

在这里插入图片描述

🔑 一、本质区别

特性主键外键
核心作用唯一标识本表记录(如身份证号)关联其他表的主键(如订单关联用户ID)
唯一性✅ 值唯一且不可重复❌ 值可重复(可关联同个主键)
空值❌ 不允许为空✅ 允许为空(如“未绑定用户”订单)
数量限制每张表仅能有一个主键每张表可有多个外键
数据约束强制非空 + 唯一性强制引用其他表的主键值(保证数据一致性)
💡 通俗比喻主键👉🏻 学生的学号(唯一标识一个人)外键👉🏻 成绩单上的学号(关联学生表,证明成绩属于谁)

⚙️ 二、实际应用场景

主键适用场景
  1. 标识核心实体:
    • 用户表 users 中的 user_id(不可重复)
  2. 加速查询:
    • 自动创建聚集索引,大幅提升检索效率 。
外键适用场景
    • 当用户被删除时,可自动级联删除其所有订单(需配置 ON DELETE CASCADE)。
  1. 建立表间关系:
    • 电商系统中:订单表 → 商品表(通过 product_id 外键关联)。

维护数据一致性:

-- 订单表(orders)外键关联用户表(users) ALTER TABLE orders ADD FOREIGN KEY (user_id) REFERENCES users(user_id); 

⚠️ 三、关键设计注意事项

  1. 主键选择:
    • 优先用自增整数(如 AUTO_INCREMENT),避免业务字段(如手机号可能变更)。
  2. 外键性能:
    • 高并发场景(如互联网应用)慎用外键,频繁校验可能降低写入性能。
    • 替代方案:应用层校验(如Redis分布式锁)。
  3. 级联操作:
    • 外键可配置级联规则(如 CASCADE/SET NULL),但误用可能导致意外数据丢失

🆚 四、主键 vs 外键 核心对比图

在这里插入图片描述

💎 五、最佳实践总结

  1. 主键必建:
    • 确保每条记录有唯一标识,无主键的表禁止上线
  2. 外键取舍:
    • 传统系统:推荐使用(简化一致性维护)。
    • 高并发系统:改用应用层校验(如阿里Java开发规范禁用外键)。
  3. 索引优化:
    • 外键字段必须建索引,避免关联查询全表扫描。
📌 一句话结论
主键管身份(唯一性),外键管关系(一致性),二者配合保障数据库的完整性与关联性 。

Read more

Java处理JSON编程实用技巧

Java处理JSON编程实用技巧

1. 前言 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。在Java开发中,JSON处理是一项非常常见且重要的任务。本文将详细介绍Java中处理JSON的各种实用技巧,包括主流JSON框架的使用、性能优化以及最佳实践。 本文将重点介绍Gson、Jackson和Fastjson这三个主流Java JSON处理库的使用技巧和性能优化方法。 2. JSON处理框架对比 Java生态中有多个优秀的JSON处理框架,每个框架都有其特点和适用场景。下面是三个主流框架的对比: 3. Gson使用技巧 3.1 基础用法 Gson是Google开发的Java库,用于将Java对象转换为JSON表示,以及将JSON字符串转换回等效的Java对象。 3.1.1 Maven依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>

By Ne0inhk
Java Web 开发:JSON 基础 + @Test 测试 + Cookie/Session/ 请求处理

Java Web 开发:JSON 基础 + @Test 测试 + Cookie/Session/ 请求处理

个人主页:♡喜欢做梦 欢迎  👍点赞  ➕关注  ❤️收藏  💬评论 目录 编辑 🍍JSON的概念  🍐概念  🍐@Test注解 🍑什么是@Test? 🍑与JSON关联 🍑@Test标记的方法与main方法的区别  🍍JSON语法  🍐核心数据类型  🍐常见使用 🍑对象 🍑数组  🍑JSON字符串和Java对象的互转 🍑传递JSON 🍑获取URL中的参数 🍑上传文件:@RequestPart  🍍Cookie和Seeion  🍐Cookie 🍑什么是Cookie? 🍑Cookie的获取  🍐Session 🍑什么是Session?  🍐Cookie和Session之间的关系 🍑Session的存储 🍑Session的获取 🍍获取header 🍍JSON的概念  🍐概念 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。他基于JavaScript的一个子集,但采用了独立语言的文

By Ne0inhk
Spring Boot 机制四: AOP 代理机制源码级深度解析(JDK / CGLIB 全链路)

Spring Boot 机制四: AOP 代理机制源码级深度解析(JDK / CGLIB 全链路)

博主社群介绍: ① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。 ② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。 ③ 群内也有职场精英,大厂大佬,跨国企业主管,可交流技术、面试、找工作的经验。 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬,进群赠送ZEEKLOG评论防封脚本,送真活跃粉丝,助你提升文章热度。 群公告里还有全网大赛约稿汇总/博客提效工具集/ZEEKLOG自动化运营脚本 有兴趣的加文末联系方式,备注自己的ZEEKLOG昵称,拉你进群,互相学习共同进步。 文章目录 * Spring Boot 机制四: AOP 代理机制源码级深度解析(JDK / CGLIB 全链路) * 目录 * 1. Spring Boot AOP 的本质是什么? * 2. JDK vs CGLIB:

By Ne0inhk