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

MySQL 约束详解:非空、主键、外键与自增机制实战

MySQL 约束机制保障数据准确性,涵盖非空、默认值、主键、自增、唯一及外键等核心概念。非空约束强制字段必须有值,避免 NULL 导致的运算歧义;主键确保记录唯一性,支持单列或复合形式;自增列需配合索引且单表仅限一个;唯一键允许多个实例但不可重复;外键维护表间引用完整性。合理配置这些约束能有效防止脏数据产生,提升数据库设计的规范性与稳定性。

魔尊发布于 2026/3/16更新于 2026/10/574 浏览
MySQL 约束详解:非空、主键、外键与自增机制实战

MySQL 约束详解:非空、主键、外键与自增机制实战

表结构设计阶段,约束是保证数据准确性的核心手段。通过技术手段倒逼写入逻辑,确保入库数据的完整性。下面结合实战场景,梳理几种常用约束的本质区别与使用规范。

非空约束与空值语义

字段默认允许为 NULL,但实际开发中应尽量避免。因为 NULL 无法参与数值运算,且统计函数处理逻辑特殊。这里需要区分 NULL 和空字符串 '':

  • NULL:表示'没有值',即缺失。
  • '':表示'有值',只是内容为空。

对比示例

默认值与列描述

DEFAULT 类似于 C++ 中的缺省参数,当插入数据未指定该字段时生效。若同时设置 NOT NULL 和 DEFAULT,则必须提供默认值。

Default 示例

注意:若未显式设置 DEFAULT,系统默认为 NULL;一旦设定 NOT NULL,则不再隐含 DEFAULT NULL。此外,利用 COMMENT 添加列描述能显著提升后续维护效率,这等同于在代码层面增加注释。

零填充约束

ZEROFILL 仅对整数类型有意义。它会在显示不足指定位数时自动补零。例如 INT(10) 配合 ZEROFILL,输入 5 会显示为 0000000005。

ZeroFill 效果

主键约束

主键(Primary Key)用于唯一标识记录,具备不可重复、不可为空的特点。一张表只能有一个主键,通常由整数类型的列构成。

主键冲突

复合主键:支持多列联合作为主键。只有当所有主键列的值同时与现有数据相同时,才会触发冲突。

复合主键

自增长约束

AUTO_INCREMENT 常用于主键列,实现逻辑上的唯一递增。其核心规则如下:

  1. 必须是整数类型。
  2. 必须建立索引。
  3. 单表最多一个自增列。

当不指定值时,系统取当前最大值加 1。自定义起始值可通过修改表属性实现。

自增长示例

查看最后插入的自增值:

SELECT LAST_INSERT_ID();

唯一键约束

唯一键(Unique Key)与主键类似,但允许存在 NULL 值(NULL 不参与计算)。一张表可拥有多个唯一键,适合用于邮箱、手机号等需去重但不作为主键的场景。

唯一键示例

外键约束

外键定义了表与表之间的引用关系,通常位于从表(子表),指向主表的主键或唯一键。

创建外键时需注意级联操作策略。如果主表数据被删除,从表受影响的行如何处理,取决于定义时的 ON DELETE 选项。

外键关系

建表示例:

CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES classes(id)
);

约束设计直接影响业务逻辑的健壮性。理解每种约束的底层行为,能帮助我们在建模阶段规避大部分数据异常风险。

目录

  1. MySQL 约束详解:非空、主键、外键与自增机制实战
  2. 非空约束与空值语义
  3. 默认值与列描述
  4. 零填充约束
  5. 主键约束
  6. 自增长约束
  7. 唯一键约束
  8. 外键约束

更多推荐文章

查看全部
  • RabbitMQ 核心工作模式实战解析
  • 基于 Trae AI 与 html.to.design 的 Figma 原型快速转换工作流
  • OpenClaw 插件更新:支持在面板配置 QQ 与飞书机器人
  • Stable Diffusion 模型自动下载与 Docker 部署指南
  • 云算力平台集成通义万相 2.1 的 AIGC 创作实战
  • GLM-4.6V-Flash-WEB 实现一分钟灾情摘要生成
  • JSP、MVC、EL、JSTL 核心技术笔记
  • 行星减速器原理、计算与 C++ 实现
  • 国产 AI 智能体工具盘点:腾讯、阿里、字节等主流产品收录
  • 飞书机器人对接 Claude Code 实现移动端 AI 编程助手
  • 前端存储三剑客:localStorage、sessionStorage 与 cookie 对比
  • Ubuntu 24.04 安装 OpenClaw 实战指南
  • MySQL 8.0 Windows 环境安装与配置实战
  • JavaScript 韦恩图绘制指南:venn.js 库使用详解
  • W17pro 平板 Android 4.0 至 4.1 升级及 Root 指南
  • Apache IoTDB 高性能存储引擎与工业级架构解析
  • CentOS 安装 epel-release 遇 SyntaxError 错误排查与修复
  • 深入理解网络 IP 协议与 TTL 机制:从原理到实践
  • Linux 基础开发工具(中):GCC 编译与 Make 构建详解
  • 设计模式:策略模式——从硬编码到灵活适配的算法解耦思想

相关免费在线工具

  • 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