跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL算法

MySQL 约束机制详解:非空、主键与外键的实际作用

MySQL 表约束保障数据准确性,包括非空、默认值、主键、自增及外键等机制。重点区分 NULL 与空字符串差异,解析主键与唯一键的约束区别,并说明外键在关联表时的数据完整性保障。适合需要规范数据库设计的开发者阅读。

晚风告白发布于 2026/3/15更新于 2026/5/2113 浏览
MySQL 约束机制详解:非空、主键与外键的实际作用

MySQL 表约束实战指南

设计表结构时,约束是保障数据质量的最后一道防线。它的核心在于通过规则限制非法数据写入,倒逼开发者遵循规范。

1. 非空约束 (NOT NULL)

字段默认允许为 NULL,但实际开发中应尽量避免。因为 NULL 值无法参与运算,且逻辑上容易引发歧义。

NULL 与空字符串的区别:

  • NULL:表示什么都没有,占位符。
  • '':表示有值,只是内容为空。

文章配图 文章配图

2. 默认值约束 (DEFAULT)

这就像 C++ 里的缺省参数。如果插入数据时未指定该列,系统会自动填充默认值。

注意:若未设置 DEFAULT 和 NOT NULL,默认行为是 DEFAULT NULL;一旦设置了 NOT NULL,则不再隐含 DEFAULT NULL。

文章配图 文章配图

3. 列描述 (COMMENT)

给字段加注释,方便后续维护。这和代码里的注释是一个道理,别嫌麻烦。

文章配图

4. 零填充 (ZEROFILL)

这个约束通常配合整数类型使用。比如 INT(10) 加上 ZEROFILL,显示不足 10 位时自动补 0。

文章配图 文章配图

5. 主键约束 (PRIMARY KEY)

主键是表的身份证,必须唯一且不能为空。一张表只能有一个主键,通常用整数类型。

删除与添加主键: 文章配图 文章配图 文章配图 文章配图

复合主键: 可以给多列联合设置主键。只有当这几列的值同时与已有数据相同时,才会触发冲突。

文章配图

6. 自增约束 (AUTO_INCREMENT)

通常搭配主键使用,作为逻辑主键。不传值时,系统自动取当前最大值 +1。

关键特性:

  • 必须是索引(Key 列有值)。
  • 必须是整数类型。
  • 一张表最多只能有一个自增列。

自定义起始值: 文章配图 文章配图 文章配图 文章配图

查看最后插入的自增值: 文章配图

7. 唯一键 (UNIQUE KEY)

主键不能为空,但唯一键可以为 NULL。NULL 不参与计算,所以允许多个 NULL 存在。

一张表可以有多个唯一键,但只能有一个主键。

文章配图

8. 外键 (FOREIGN KEY)

外键用于定义表与表之间的关系,主要定义在从表上。主表必须有主键或唯一键。

例如班级与学生是一对多关系,学生表中的班级 ID 就是外键。

文章配图 文章配图 文章配图 文章配图

创建外键时,要求外键列的数据必须在主表的主键列中存在,或者为 NULL。

文章配图 文章配图 文章配图

目录

  1. MySQL 表约束实战指南
  2. 1. 非空约束 (NOT NULL)
  3. 2. 默认值约束 (DEFAULT)
  4. 3. 列描述 (COMMENT)
  5. 4. 零填充 (ZEROFILL)
  6. 5. 主键约束 (PRIMARY KEY)
  7. 6. 自增约束 (AUTO_INCREMENT)
  8. 7. 唯一键 (UNIQUE KEY)
  9. 8. 外键 (FOREIGN KEY)
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 算法位运算实战:两整数之和、只出现一次数字及消失数字
  • C++ 笔试高频题解析:组合数学、BFS 与贪心调度
  • LeRobot 开源机器人学习框架入门指南
  • 基于 AI 辅助开发的在线图书借阅平台设计与实现
  • AI 产品经理工作全流程详解:从需求定义到模型验收
  • 开源医疗大模型排行榜:健康领域大模型基准测试
  • Comfy-Photoshop-SD:ComfyUI与Photoshop AI绘画集成方案
  • 第 14 届蓝桥杯省赛 Java A 组 Q1~Q3 题解
  • AIGC 模型推理延迟优化:C++ 级方案解析
  • Apache ShardingSphere 高性能架构实践:读写分离与分片详解
  • Web 聊天室消息加解密方案详解
  • 前端函数防抖详解:原理、手写实现与实战应用
  • 7 种主流数据分析软件比较及经典教材推荐
  • 当前互联网行情下 Flutter 就业前景与学习路线分析
  • Linux Makefile 自动化编译实战指南及进度条实现
  • Java 面试解析:Spring Boot 与微服务架构
  • Android 积分签到上移消失动画效果实现
  • 渗透测试基础概念、流程与常见漏洞详解
  • FPGA 高速通信:Aurora64B/66B IP 使用指南
  • 想成为黑客或信息安全从业者,该如何入门?

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online