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

MySQL 表约束详解:从基础到实战

本文详细讲解了 MySQL 表约束的核心概念及实战用法。涵盖非空、默认值、注释、零填充、主键(含复合)、自增长、唯一键及外键约束。通过代码示例展示了如何定义约束以及违反约束时的表现,强调了约束在保证数据完整性和一致性方面的重要性。重点解析了 NOT NULL 与 DEFAULT 的配合、外键的双向约束机制等易错点,帮助开发者建立规范的数据库设计思维。

KernelLab发布于 2026/3/22更新于 2026/6/2429 浏览
MySQL 表约束详解:从基础到实战

MySQL 表约束详解:从基础到实战

在数据库设计中,数据类型只是第一道防线。真正保证数据质量、防止脏数据入库的,是表的约束(Constraints)。它们像一套隐形的规则,强制程序写入符合预期的数据。

为什么需要表约束?

单纯依靠数据类型(如 INT, VARCHAR)有时是不够的。比如 INT 能限制范围,但无法阻止你插入逻辑上错误的值(如年龄为负数)。约束机制就是为了解决这类问题,通过技术手段倒逼开发者输入正确数据。站在数据库的角度,凡是成功存入的数据,都必须满足所有定义的约束条件。

常见约束类型

非空约束 (NOT NULL)

默认情况下,字段允许为 NULL。如果业务要求某项信息必须存在(例如用户名),就需要设置 NOT NULL。

CREATE TABLE users (
    id INT,
    name VARCHAR(50) NOT NULL
);

执行 DESC users 可以看到 Null 列显示为 NO。尝试插入 NULL 值时,MySQL 会直接拦截并报错。

默认值 (DEFAULT)

当某个字段经常使用固定值时,可以设置默认值。这类似于函数参数中的缺省值,不传参时使用预设值。

CREATE TABLE orders (
    id INT,
    status VARCHAR(20) DEFAULT 'pending'
);

插入数据时若未指定 status,系统会自动填入 'pending'。

注意:NOT NULL 和 DEFAULT 并不冲突,而是互补。NOT NULL 禁止显式传入空值,而 DEFAULT 在不传值时提供兜底。两者常结合使用:column_type NOT NULL DEFAULT value。

列描述 (COMMENT)

用于记录字段的业务含义,方便后续维护。它不会改变数据行为,仅作为元数据保存。

CREATE TABLE products (
    price DECIMAL(10,2) COMMENT '商品单价'
);

查看描述需使用 SHOW CREATE TABLE,DESC 命令通常不显示注释内容。

零填充 (ZEROFILL)

主要用于整数显示格式。开启后,不足宽度的数字会在左侧自动补零。

CREATE TABLE numbers (
    a INT ZEROFILL(10)
);

插入 123 后,查询结果显示为 0000000123。注意:这只是显示效果,底层存储依然是 123。此外,ZEROFILL 隐含了 UNSIGNED 属性。

主键 (PRIMARY KEY)

主键是唯一标识一行记录的字段,具有唯一性且不能为空。一张表只能有一个主键。

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

若表已创建,可使用 ALTER TABLE 添加或删除主键:

ALTER TABLE students ADD PRIMARY KEY (id);
ALTER TABLE students DROP PRIMARY KEY;
复合主键

当单个字段无法唯一标识记录时,可将多个字段组合成主键。只有组合完全重复时才会触发约束。

CREATE TABLE enrollments (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id)
);

自增长 (AUTO_INCREMENT)

常用于主键,自动分配递增的唯一整数。通常与主键配合使用。

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    msg VARCHAR(255)
);

特性:

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

手动插入过 ID 后,自增计数器会从当前最大值 +1 开始,可通过 SHOW CREATE TABLE 查看 AUTO_INCREMENT 值。

唯一键 (UNIQUE KEY)

保证字段值不重复,但允许为空(空值之间互不影响唯一性)。适合邮箱、手机号等场景。

CREATE TABLE accounts (
    email VARCHAR(100) UNIQUE
);

外键 (FOREIGN KEY)

用于维护表与表之间的关联关系。外键列的值必须在主表的主键或唯一键中存在,或者为 NULL。

-- 主表
CREATE TABLE classes (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- 从表
CREATE TABLE students (
    id INT PRIMARY KEY,
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES classes(id)
);

外键约束是双向的:既防止从表引用不存在的主表数据,也防止主表删除被从表引用的数据(除非级联操作)。这是保证数据一致性的关键机制。


掌握这些约束,能让你的数据库设计更加健壮,减少后期维护成本。在实际开发中,根据业务需求合理组合使用,是构建高质量数据模型的基础。

  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • ESP32-S3 微型无人机系统架构与飞控实现
  • OpenClaw 橙皮书与蓝皮书核心内容解析
  • Xilinx 7 Series FPGA I/O引脚分配优化策略:从SSN分析到PCB布局
  • New API 详解:开源大模型统一网关与 AI 资产管理系统
  • 5 本经典 Python 书籍推荐,构建扎实编程基础
  • 自然语言处理在社交媒体分析中的应用与实战
  • FPGA 加速 CNN:Winograd 算法原理与计算优化
  • 如何确认 Windows 下是否安装 C++ 开发工具
  • OpenList 配置连接 Windows 网络映射硬盘
  • Cursor 2.0 多 Agent 模式下的 Git Worktree 原理与实战
  • 渐进式 Web 应用开发实例:核心技术与实战
  • Llama-2-7b 在昇腾 NPU 上的六大核心场景性能基准报告
  • 互联网大厂 Android 面试题大全与核心知识点解析
  • Lua 元表与元方法详解
  • 基于 QNN 框架在 Android 端部署 LLaMA-7B 大模型实战
  • 基于 Java 和 Spring Boot 的疫苗接种管理系统设计与实现
  • LangChain4j 集成国产大模型:通义千问、文心一言与智谱 AI 实践
  • 模拟算法精选:替换问号、提莫攻击、Z 字形变换与外观数列
  • VSCode 配合 Git 实现代码仓库回滚指南
  • Whisper-WebUI 智能语音转文字工具详解

相关免费在线工具

  • 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

目录

  1. MySQL 表约束详解:从基础到实战
  2. 为什么需要表约束?
  3. 常见约束类型
  4. 非空约束 (NOT NULL)
  5. 默认值 (DEFAULT)
  6. 列描述 (COMMENT)
  7. 零填充 (ZEROFILL)
  8. 主键 (PRIMARY KEY)
  9. 复合主键
  10. 自增长 (AUTO_INCREMENT)
  11. 唯一键 (UNIQUE KEY)
  12. 外键 (FOREIGN KEY)
  • 免费图片AI生成工具免费生成了解详情