news 2026/3/25 12:47:06

MySQL 数据库约束:核心概念、类型与应用详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 数据库约束:核心概念、类型与应用详解

MySQL 中的数据库约束是作用于数据表列 / 行的规则,用于限制存入数据的格式、范围和关联性,核心目的是保障数据的完整性(准确性、一致性),避免无效、冗余或冲突的数据进入数据库,是数据库设计和数据质量管理的核心环节。

一、约束的核心类型及使用场景

MySQL 支持 6 类核心约束,可分为列级约束(仅作用于单个列)和表级约束(可作用于多个列),具体如下:

约束类型核心作用适用场景示例语法(创建表时)
非空约束(NOT NULL)限制列的值不能为 NULL(空值)必须填写的字段(如用户名、手机号)username VARCHAR(50) NOT NULL
唯一约束(UNIQUE)限制列的值在整张表中唯一(可包含一个 NULL)唯一标识字段(如邮箱、身份证号)email VARCHAR(100) UNIQUE
主键约束(PRIMARY KEY)非空 + 唯一,唯一标识表中每一行(一张表仅一个主键)核心标识字段(如用户 ID、订单 ID)id INT PRIMARY KEY AUTO_INCREMENT
外键约束(FOREIGN KEY)建立两张表的关联,限制外键列的值必须来自主表的主键 / 唯一列关联表(如订单表关联用户表)user_id INT FOREIGN KEY REFERENCES user(id)
检查约束(CHECK)限制列的值满足指定条件(MySQL 8.0.16+ 正式支持)数值范围 / 格式校验(如年龄、金额)age INT CHECK (age >= 0 AND age <= 120)
默认约束(DEFAULT)列未赋值时自动填充默认值可选字段(如性别、状态)gender CHAR(1) DEFAULT '男'
二、关键约束深度解析
1. 主键约束(PRIMARY KEY)
  • 特性:一张表只能有一个主键,主键列必须非空且唯一;可设置为「复合主键」(多个列组合成主键,如订单详情表order_id + product_id)。
  • 常用配置:搭配AUTO_INCREMENT实现主键自增(仅适用于 INT/BIGINT 等数值类型),避免手动赋值冲突。

    sql

    CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键 username VARCHAR(50) NOT NULL );
2. 外键约束(FOREIGN KEY)
  • 核心规则:外键列的数据类型必须与主表关联列一致;主表删除 / 更新数据时,需通过ON DELETE/UPDATE定义关联行为:
    • ON DELETE CASCADE:主表删除,从表关联数据同步删除(如删除用户时,删除其所有订单);
    • ON DELETE SET NULL:主表删除,从表外键列设为 NULL(需外键列允许 NULL);
    • ON DELETE RESTRICT:主表存在关联数据时,禁止删除(默认行为)。

    sql

    CREATE TABLE order ( order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE );
  • 注意:MySQL 中仅 InnoDB 存储引擎支持外键,MyISAM 不支持;外键会增加性能开销,高并发场景可通过业务逻辑保障关联完整性。
3. 检查约束(CHECK)
  • 此前 MySQL 对 CHECK 仅语法支持但不生效,8.0.16 版本后正式强制执行:

    sql

    CREATE TABLE product ( price DECIMAL(10,2) CHECK (price > 0), -- 价格必须大于0 stock INT CHECK (stock >= 0) -- 库存不能为负 );
三、约束的添加与修改
1. 新增表时添加约束

sql

CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增 name VARCHAR(50) NOT NULL, -- 非空 phone VARCHAR(11) UNIQUE, -- 唯一 grade INT DEFAULT 0, -- 默认值 class_id INT, FOREIGN KEY (class_id) REFERENCES class(id), -- 外键 score INT CHECK (score >= 0 AND score <= 100) -- 检查 );
2. 已有表添加约束

sql

-- 给student表添加唯一约束(手机号) ALTER TABLE student ADD UNIQUE (phone); -- 给student表添加外键约束 ALTER TABLE student ADD FOREIGN KEY (class_id) REFERENCES class(id);
3. 删除约束

sql

-- 删除主键约束 ALTER TABLE student DROP PRIMARY KEY; -- 删除唯一约束(需先查约束名:SHOW INDEX FROM student;) ALTER TABLE student DROP INDEX phone; -- 删除外键约束(需先查约束名:SHOW CREATE TABLE student;) ALTER TABLE student DROP FOREIGN KEY student_ibfk_1;
四、约束的使用原则
  1. 优先通过约束保障数据完整性,而非仅依赖业务代码(避免代码漏洞导致脏数据);
  2. 高并发场景适度简化约束(如去掉外键、仅保留核心主键 / 非空约束),平衡性能与数据规范;
  3. 主键尽量使用自增 INT/BIGINT(而非 UUID),减少索引碎片,提升查询效率;
  4. 唯一约束可搭配索引使用(MySQL 自动为唯一约束创建索引),提升查询速度。
五、常见问题
  • Q:主键和唯一约束的区别?A:主键非空且一张表仅一个,唯一约束可多个且允许一个 NULL;主键默认是聚簇索引,唯一约束默认是非聚簇索引。
  • Q:为什么不建议用外键?A:外键会增加表关联的性能开销,且容易导致死锁;分布式系统中,跨库外键无法生效,通常通过业务逻辑 + 定时校验保障数据关联。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 8:37:43

Redhat Debian Suse 主流OS 之间的区别

Fedora 介绍&#xff08;官网&#xff09;: https://docs.fedoraproject.org/en-US/project/ Redhat &#xff1a;https://www.redhat.com/zh-cn?ohwww.redhat.com.cn suse 官网 关于我们(中文版) https://www.suse.com/zh-cn/company/about/#suse-history debian 官网介绍: …

作者头像 李华
网站建设 2026/3/25 2:42:20

磁盘分区与文件系统格式相关

MBR 重要数据&#xff1a; 主引导扇区&#xff08;512字节&#xff09; 主引导记录&#xff1a;记录系统引导程序相关数据&#xff08;前446字节&#xff09;分区表&#xff1a;记录磁盘分区开始位置、大小等信息&#xff08;4*1664字节&#xff09;魔数&#xff1a;0x55AA&a…

作者头像 李华
网站建设 2026/3/25 2:14:14

新品发布 | 生产、制造及售后领域强有力的VCI接口M810

MC810是MC产品系列的又一个强大的VCI。凭借紧凑的设计和WiFi、USB及蓝牙作为主机系统的接口&#xff0c;以及CAN(FD)、以太网到车辆&#xff0c;MC810特别适合面向未来的制造和售后服务应用。一、应用场景下图展示了通过车辆通信卡进行诊断测试的系统框图。其中&#xff0c;PC可…

作者头像 李华
网站建设 2026/3/25 4:18:47

LLaMA Factory微调大模型完整指南:从数据准备到API部署

本文详细介绍了使用LLaMA Factory对大语言模型进行指令监督微调(SFT)的完整流程。从数据准备、清洗和格式化开始&#xff0c;讲解了全量微调(Full FT)和参数高效微调(PEFT/LoRA)两种技术方法&#xff0c;最后通过LLaMA Factory API和Ollama API实现模型部署。文章提供了详细的配…

作者头像 李华
网站建设 2026/3/25 0:43:31

谷歌PH-LLM大模型:可穿戴设备数据的健康洞察革命

谷歌推出基于Gemini模型的PH-LLM大模型和智能Agent系统&#xff0c;能够分析可穿戴设备数据并生成个性化健康建议。PH-LLM在睡眠和健身领域表现接近专家水平&#xff0c;而智能Agent可通过迭代推理提供准确健康洞察。这两项技术为开发真正个性化的健康助手奠定基础&#xff0c;…

作者头像 李华
网站建设 2026/3/25 9:46:42

效率提升超24倍!如何实现财务报表OCR识别自动录入?

借助智能财报录入系统&#xff0c;银行将PDF、图片等非结构化财报秒级转为结构化数据。该方案能精准解析印章遮挡及跨页表格&#xff0c;通过自动勾稽校验确保准确性&#xff0c;将作业效率提升超24倍&#xff0c;解决人工录入效率低、易出错的痛点。 为什么银行必须升级到智能…

作者头像 李华