【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

Trae x Vizro:低代码构建专业数据可视化仪表板的高效方案

Trae x Vizro:低代码构建专业数据可视化仪表板的高效方案

声明:文章为本人真实测评博客,非广告,并没有推广该平台 ,为用户体验文章 目录 * 前言 * 一.核心工具与优势解析 * 低代码高效开发 * 专业视觉设计 * 高度灵活可定制 * AI赋能创新 * 二.操作步骤:从安装到生成效果 * 第一步. 获取MCP配置代码 * 第二步:下载 * 第三步:在 Trae 中导入 MCP 配置并建立连接 * 三. 实战:用Vizro MCP快速构建仪表板 * 1. 提出需求 * 2.智能体生成代码 * 3.查看运行结果 * 4.优化与部署 * 四.Vizro MCP核心功能解析 * get_vizro_chart_or_dashboard_plan * get_model_json_

By Ne0inhk

Cosmos-Reason1-7B精彩案例分享:机器人抓取前的重力/摩擦/稳定性分析

Cosmos-Reason1-7B精彩案例分享:机器人抓取前的重力/摩擦/稳定性分析 1. 引言:当机器人学会“思考”物理世界 想象一下,你面前有一张桌子,上面放着一个装满水的玻璃杯。你想把它拿起来,你的大脑会在一瞬间完成一系列复杂的判断:这个杯子重不重?表面滑不滑?我该用多大的力气?抓哪个位置最稳?这些基于重力、摩擦力和稳定性的直觉判断,是人类与生俱来的物理常识。 但对于机器人来说,这曾是一个巨大的挑战。传统的机器人抓取依赖于预先编程的规则或大量标注数据,它们“看到”杯子,却不一定“理解”杯子。它们不知道水会增加重量,不知道湿滑的表面需要更大的摩擦力,更不知道抓取边缘可能导致倾覆。 今天,我们要分享的,就是如何让机器人获得这种“物理直觉”。借助 NVIDIA 开源的 Cosmos-Reason1-7B 模型,我们可以构建一个能“看懂”场景,并进行链式物理推理的视觉系统。本文将通过一个核心案例——机器人抓取前的综合分析,带你亲眼见证 AI

By Ne0inhk
Mujoco足式机器人强化学习训练02(URDF转XML)

Mujoco足式机器人强化学习训练02(URDF转XML)

URDF文件转XML文件 在安装完成mujoco playground以后,设计到三维模型的导入,在sw转出的文件大多为URDF格式,但是mujoco仿真的时候大多支持xml文件 xml文件官方地提供了转换脚本,需要下载mujoco工程文件,注意和上节下载的mujoco playground不是一个工程文件 1. mujoco工程文件下载 https://mujoco.org/download/mujoco210-linux-x86_64.tar.gz exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/.mujoco/mujoco210/bin 2. 在URDF文件中添加代码 <mujoco><compilermeshdir="../meshes/"balanceinertia="true"discardvisual="false"/><

By Ne0inhk
(保姆级教程)通过官方API搭建一个自己的QQ群聊机器人

(保姆级教程)通过官方API搭建一个自己的QQ群聊机器人

简介 用官方api做了一个qq群聊机器人的demo,有获取天气、简单编辑待办、从本地发送图片等功能。 建了个群,欢迎来交流( QQ群号:710101225 重新写了个基于nonebot框架的教程,个人认为比官方sdk更容易开发:https://blog.ZEEKLOG.net/Clovertaa/article/details/145452834 获取 机器人demo GitHub仓库:GitHub - ClovertaTheTrilobita/SanYeCao-bot: 一个基于官方API的QQ群聊机器人 官方SDK GitHub仓库:GitHub - tencent-connect/botpy: QQ频道机器人PythonSDK 教程 前置需求 本项目使用conda环境和git操作。如果未安装这两个工具请首先移步 史上最全最详细的Anaconda安装教程-ZEEKLOG博客 Git 详细安装教程(详解 Git 安装过程的每一个步骤)_git安装-ZEEKLOG博客 (这俩教程我粗略看了下感觉挺好的,如果不适合你那烦请自行百度了qwq) 一

By Ne0inhk