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

MySQL 约束详解:非空、主键与外键的核心作用

MySQL 表约束是保障数据完整性的关键机制。梳理了非空、默认值、零填充等基础约束,重点解析了主键、自增列、唯一键及外键的定义与限制。通过对比 NULL 与空字符串、说明复合主键冲突逻辑、阐述外键级联规则,帮助开发者建立规范的建表思维,避免常见的设计陷阱。

星辰大海发布于 2026/3/27更新于 2026/10/2499 浏览
MySQL 约束详解:非空、主键与外键的核心作用

MySQL 约束详解:非空、主键与外键的核心作用

表结构设计离不开约束(Constraint)。约束的本质是通过技术手段倒逼开发者插入正确的数据,从而保证数据库的准确性。在实际开发中,合理设置约束是保障数据完整性的最后一道防线。

一、非空约束 (NOT NULL)

字段默认允许为 NULL,但实际开发中我们更倾向于 NOT NULL。因为数据为空往往无法参与运算,且逻辑判断会变得复杂。

这里有个常见的误区:NULL 和 ''(空字符串)的区别。

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

文章配图 文章配图

二、默认值约束 (DEFAULT)

DEFAULT 约束类似于 C++ 中的默认参数。如果插入数据时未指定该字段,系统会自动填入默认值。

-- 示例:age 默认为 18
CREATE TABLE users (
    id INT PRIMARY KEY,
    age INT DEFAULT 18
);

注意一个细节:如果表中既没有设置 DEFAULT 也没有设置 NOT NULL,默认行为是 DEFAULT NULL。但如果设置了 NOT NULL,就不会再有 DEFAULT NULL 了。

文章配图 文章配图

三、列描述 (COMMENT)

给字段加注释,这跟代码里的注释一样重要,方便后续维护。

文章配图

四、零填充约束 (ZEROFILL)

这个约束通常配合 INT 使用。比如 INT(10) 本身不显示前导零,加上 ZEROFILL 后,如果数字不足 10 位,会用 0 来补齐显示。

文章配图 文章配图

五、主键约束 (PRIMARY KEY)

主键是表的唯一标识。它有两个硬性要求:不能重复,不能为空。一张表中最多只能有一个主键,通常由整数类型构成。

移除与添加主键

-- 移除主键
ALTER TABLE table_name DROP PRIMARY KEY;

-- 添加主键
ALTER TABLE table_name ADD PRIMARY KEY (id);

文章配图 文章配图

复合主键

主键不只限于单列。当多列组合起来能唯一标识一行时,就是复合主键。只有当这几列同时与过往数据完全一致时,才会产生冲突。

文章配图

六、自增约束 (AUTO_INCREMENT)

自增列通常作为逻辑主键使用。当字段未赋值时,系统会从当前最大值 +1 生成新值。

几个关键点:

  1. 自增字段必须是整数。
  2. 一张表最多只能有一个自增列。
  3. 做自增的前提是该字段本身必须包含索引。
-- 自定义起始值
ALTER TABLE table_name AUTO_INCREMENT = 100;

-- 查看当前自增值
SHOW TABLE STATUS LIKE 'table_name';

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

七、唯一键 (UNIQUE)

唯一键也要求数据不重复,但它可以接受 NULL 值。NULL 表示'无',不参与比较,所以多个 NULL 并不冲突。

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

文章配图

八、外键 (FOREIGN KEY)

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

举个例子,学生属于班级,那么学生表里就需要一个外键指向班级表的主键。这样能保证录入的学生所属班级是真实存在的。

-- 创建外键
ALTER TABLE student 
ADD CONSTRAINT fk_class_id 
FOREIGN KEY (class_id) REFERENCES class(id);

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

外键约束主要定义在从表上,当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL。设计时需谨慎,避免影响性能。

目录

  1. MySQL 约束详解:非空、主键与外键的核心作用
  2. 一、非空约束 (NOT NULL)
  3. 二、默认值约束 (DEFAULT)
  4. 三、列描述 (COMMENT)
  5. 四、零填充约束 (ZEROFILL)
  6. 五、主键约束 (PRIMARY KEY)
  7. 移除与添加主键
  8. 复合主键
  9. 六、自增约束 (AUTO_INCREMENT)
  10. 七、唯一键 (UNIQUE)
  11. 八、外键 (FOREIGN KEY)

更多推荐文章

查看全部
  • JavaScript 比较与逻辑运算符基础
  • Python 入门教程:核心特性、学习路线与实战建议
  • C++ 智能指针详解:原理、实现与使用
  • Alpine Linux apk 包管理器使用指南
  • 二叉树算法实战:美国血统重建与深度宽度计算
  • 腾讯大模型「实用」路线揭示企业 AI 应用新方向
  • OpenClaw 技术解析:构建 AI 行动型智能体的架构与实践
  • AI 大模型将如何重塑日常生活与移动端体验
  • GitHub 界面本地化插件:效率提升与全中文体验技巧
  • 25 个实用 Prompt 技巧:如何有效降低内容 AI 检测率
  • 测试驱动开发(TDD)核心流程与 Java 实战
  • Dify 与 MySQL 深度融合:基于 MCP 协议实现智能数据查询
  • VSCode 中 GitHub Copilot 安装与实战指南
  • C++ STL 双端队列原理与优先级队列模拟实现
  • 文心一言与通义千问大模型能力对比评测
  • 亚马逊 AI 编程工具 Kiro 初体验与规范驱动开发实践
  • 基于 OpenClaw 快速搭建 AI 量化系统实战
  • 大模型(LLM)学习路线与核心资料整理
  • Ambari Blueprint 核心概念与高可用部署说明
  • 全球老龄化背景下的护理机器人发展现状与趋势

相关免费在线工具

  • 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

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online