当前位置: 首页 > news >正文

外键(了解即可)

我帮你把这份 MySQL 外键笔记 整理成清爽、规范、可直接复制到笔记软件的美化版 Markdown,结构更清晰、重点更突出:


外键(Foreign Key)

了解即可,实际开发不推荐使用数据库物理外键

一、基本概念

  • 外键:用于建立主表从表之间的关联,保证数据的参照完整性。
  • 主表:被引用的表(如 grade 年级表)。
  • 从表:引用别人的表(如 student 学生表)。

二、方式一:创建表时直接添加外键(复杂)

1. 先创建主表 grade

CREATE TABLE IF NOT EXISTS `grade`(`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

2. 再创建从表 student,并定义外键

CREATE TABLE IF NOT EXISTS `student`(`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',`gradeid` INT(10) NOT NULL COMMENT '学生的年级',`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`id`),KEY `FK_gradeid` (`gradeid`),CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

核心语句

-- 定义外键索引
KEY `FK_gradeid` (`gradeid`),
-- 添加外键约束
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)

三、注意事项

  • 有外键关联时,不能直接删除主表
  • 删除顺序:
    1. 先删 从表(引用别人的表)
    2. 再删 主表(被引用的表)

四、方式二:创建表后追加外键(推荐写法)

1. 先分别创建两张表(无外键)

-- 主表
CREATE TABLE IF NOT EXISTS `grade`(`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;-- 从表
CREATE TABLE IF NOT EXISTS `student`(`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',`gradeid` INT(10) NOT NULL COMMENT '学生的年级',`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

2. 使用 ALTER 添加外键

通用公式

ALTER TABLE `从表名`
ADD CONSTRAINT `约束名` FOREIGN KEY(`外键列`) REFERENCES `主表名`(`主表列`);

示例

ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

五、重要结论(必看)

以上都是 物理外键(数据库级外键)

❌ 不建议使用

  • 会让数据库关系变得复杂
  • 影响性能、扩展性差

✅ 最佳实践

  1. 数据库只负责存数据,不做关联约束。
  2. 外键逻辑在代码/业务层实现

http://www.jsqmd.com/news/610132/

相关文章:

  • 避开选择误区!2026年安徽省考培训服务商综合实力榜 - 2026年企业推荐榜
  • ML302开发板AT指令实战:从驱动安装到第一个AT命令响应(避坑指南)
  • 一文学习 工作流开发 BPMN、 Flowable壹
  • STM32取代51单片机的技术优势与开发实践
  • PaddlePaddle-GPU环境配置:为什么你的显卡总是被识别成CPU?(附解决方案)
  • OpenClaw健康检查:Qwen3-4B模型服务监控与告警配置
  • TVS和稳压二极管到底什么区别
  • 车载嵌入式单色显示驱动框架Tutorial9Mono详解
  • Arduino DW1000超宽带UWB驱动库深度解析
  • 手把手教你将大彩串口屏官方例程移植到STM32F407(HAL库版,含串口中断配置)
  • 2026年合肥国考培训实力盘点:五家深度解析与科学选型指南 - 2026年企业推荐榜
  • 你的AI API密钥安全吗?聊聊BYOK模式的正确打开方式
  • BME82M131环境光传感器驱动开发与多平台移植
  • 2026年工业节能降耗关键战:三大顶尖玻璃钢冷却塔实力厂商全景评估 - 2026年企业推荐榜
  • 2026力量健身器材选购指南:江苏五强企业深度解析与选型建议 - 2026年企业推荐榜
  • 为什么你的.NET 9边缘应用仍超20MB?——8个被官方文档忽略的IL trimming致命陷阱
  • *题解:P4375 [USACO18OPEN]Out of Sorts G
  • 用Python搞定拉普拉斯变换:从电路分析到微分方程实战(附完整代码)
  • Autoware中基于点云聚类的障碍物检测:从仿真环境搭建到算法实践
  • 极客玩法:用OpenClaw和Qwen3.5-9B搭建个人AI运维助手
  • LLM API成本优化LLM API成本优化实战:日均10万调用如何将月费从2万降到8千
  • 2026新手雪茄购全指南:雪茄品鉴/雪茄培训/雪茄收藏/雪茄配件/非古雪茄/高希霸/高端雪茄/中式雪茄/选择指南 - 优质品牌商家
  • 全志科技Linux驱动开发面试经验与Cache一致性解析
  • 【MCP over Python 架构黄金标准】:基于gRPC+FastAPI+Redis Stream的5层解耦设计图,已通过10万TPS压测验证
  • 2026无锡公司注册怎么选:董事会变更/跨区地址变更/降资/代理记账/公司变更/公司名称变更/公司注销/选择指南 - 优质品牌商家
  • 2026年烟台全屋定制怎么选?这5家实力厂商值得重点关注 - 2026年企业推荐榜
  • 考研高数必备:三角积分速记口诀与实战技巧(附常见错误分析)
  • 2026青砖青瓦实力厂家名录:陕西古建配件生产厂家/陕西青砖青瓦厂家/青砖青瓦厂家哪家实力大/选择指南 - 优质品牌商家
  • 批量修改图片DPI信息工具操作指南:统一图片DPI标注的本地处理流程
  • LPC11U24单总线DHT22/RHT03轻量驱动实现