【MySQL6】约束
一、约束概述1. 什么是约束约束是作用于数据表字段上的规则用于限制存入表中的数据。2. 使用目的保障数据库数据的正确性、有效性、完整性防止脏数据入库。3. 六大约束分类汇总表格约束关键字约束名称作用说明NOT NULL非空约束字段值不能为 NULL必须填写UNIQUE唯一约束字段所有值不能重复允许一个 NULLPRIMARY KEY主键约束等价NOT NULL UNIQUE一张表仅一个主键常搭配自增AUTO_INCREMENTDEFAULT默认约束不主动给字段传值时自动填充预设默认值CHECK检查约束限定字段值满足指定条件MySQL8.0 完整支持FOREIGN KEY外键约束关联两张表保证父子表数据一致性二、前五类单表约束实战非空 / 唯一 / 主键 / 默认 / 检查1. 需求说明user 用户表表格字段类型约束规则idint主键、自增、唯一不为空namevarchar(10)非空 全局唯一ageint年龄范围0 age ≤ 120statuschar(1)不传值默认填充1genderchar(1)无约束可空可重复2. 建表 SQL修正 MySQL 语法问题原代码两处语法坑user是 MySQL 系统关键字表名必须用反引号userSQL 判断逻辑符不能写标准使用ANDsqlCREATE TABLE user( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键ID, name VARCHAR(10) NOT NULL UNIQUE COMMENT 姓名, age INT CHECK ( age 0 AND age 120 ) COMMENT 年龄, status CHAR(1) DEFAULT 1 COMMENT 状态, gender CHAR(1) COMMENT 性别 ) COMMENT 用户信息表;3. 插入测试数据 约束报错解析sql-- 1. 合法数据插入成功 INSERT INTO user(name,age,status,gender) VALUES (Tom1,19,1,男),(Tom2,25,0,男); INSERT INTO user(name,age,status,gender) VALUES (Tom3,19,1,男); -- 2. 违反【NOT NULL非空约束】name传入null插入失败 INSERT INTO user(name,age,status,gender) VALUES (null,19,1,男); -- 3. 违反【UNIQUE唯一约束】Tom3姓名已存在重复插入失败 INSERT INTO user(name,age,status,gender) VALUES (Tom3,19,1,男); -- 4. 合法数据年龄80符合0~120范围 INSERT INTO user(name,age,status,gender) VALUES (Tom4,80,1,男); -- 5. 违反【CHECK检查约束】age-1小于0插入失败 INSERT INTO user(name,age,status,gender) VALUES (Tom5,-1,1,男); -- 6. 违反【CHECK检查约束】age121超过上限120插入失败 INSERT INTO user(name,age,status,gender) VALUES (Tom5,121,1,男); -- 7. 合法数据未传入status自动填充默认值1DEFAULT默认约束生效 INSERT INTO user(name,age,gender) VALUES (Tom5,120,男);单表约束总结NOT NULL字段禁止为空UNIQUE字段值全局唯一PRIMARY KEY主键自带非空 唯一搭配AUTO_INCREMENT实现自增 IDDEFAULT省略字段传参时自动填充默认值CHECK限制字段数值区间、格式过滤非法数据。三、外键约束 FOREIGN KEY多表关联约束1. 外键核心概念作用建立两张表的数据关联维护父子表数据一致性、完整性父表主表被引用的表示例dept部门表子表从表包含外键字段、引用父表主键的表示例emp员工表无外键时可随意插入不存在的部门 ID会产生无效脏数据添加外键后会校验关联关系。2. 父子表建表与基础数据父表dept 部门表sqlCREATE TABLE dept( id INT AUTO_INCREMENT COMMENT 部门ID PRIMARY KEY, name VARCHAR(50) NOT NULL COMMENT 部门名称 ) COMMENT 部门父表; -- 插入部门数据 INSERT INTO dept (id, name) VALUES (1, 研发部), (2, 市场部),(3, 财务部), (4, 销售部), (5, 总经办);子表emp 员工表dept_id 用于关联部门 idsqlCREATE TABLE emp( id INT AUTO_INCREMENT COMMENT 员工ID PRIMARY KEY, name VARCHAR(50) NOT NULL COMMENT 姓名, age INT COMMENT 年龄, job VARCHAR(20) COMMENT 职位, salary INT COMMENT 薪资, entrydate DATE COMMENT 入职时间, managerid INT COMMENT 直属领导ID, dept_id INT COMMENT 关联部门ID外键字段 ) COMMENT 员工子表; -- 插入员工测试数据 INSERT INTO emp (id, name, age, job,salary, entrydate, managerid, dept_id) VALUES (1, 金庸, 66, 总裁,20000, 2000-01-01, null,5), (2, 张无忌, 20, 项目经理,12500, 2005-12-05, 1,1), (3, 杨逍, 33, 开发, 8400,2000-11-03, 2,1), (4, 韦一笑, 48, 开发,11000, 2002-02-05, 2,1), (5, 常遇春, 43, 开发,10500, 2004-09-07, 3,1), (6, 小昭, 19, 程序员鼓励师,6600, 2004-10-12, 2,1);3. 外键基础语法1建表后追加外键sqlALTER TABLE 子表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (子表外键字段) REFERENCES 父表(父表主键字段);实战添加外键sql-- 给emp表dept_id添加外键关联dept表id ALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id);2删除已存在的外键sqlALTER TABLE emp DROP FOREIGN KEY fk_emp_dept_id;4. 外键更新 / 删除五种行为ON UPDATE / ON DELETE表格行为参数规则说明NO ACTION默认行为父表数据被删 / 改子表存在关联数据时禁止操作RESTRICT和 NO ACTION 效果一致MySQL 标准推荐写法CASCADE级联操作父表修改 / 删除同步更新 / 删除子表关联记录SET NULL父表修改 / 删除子表对应外键字段自动置为 NULLSET DEFAULT父表变更时子表外键填充预设默认值极少使用示例 1级联更新、级联删除 CASCADEsqlALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE;效果修改 / 删除 dept 表部门 idemp 表内对应员工dept_id同步修改 / 删除。示例 2置空 SET NULLsqlALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE SET NULL ON DELETE SET NULL;效果删除部门后该部门员工的dept_id自动变为 NULL。四、全文知识点总结MySQL 共 6 大类常用约束分为两大模块单表字段约束作用于单张表NOT NULL 非空约束UNIQUE 唯一约束PRIMARY KEY 主键约束DEFAULT 默认约束CHECK 检查约束多表关联约束跨两张表FOREIGN KEY 外键约束搭配 5 种删除更新行为控制父子表联动逻辑

相关新闻

Elasticsearch核心架构与生产环境实战指南

Elasticsearch核心架构与生产环境实战指南

1. Elasticsearch核心架构解析当我们需要处理海量数据时,传统数据库往往力不从心。Elasticsearch作为分布式搜索引擎的标杆,其底层架构设计堪称经典。我在实际生产环境中部署过数十个ES集群,最深切的体会是:理解其底层原理&#x…

2026/7/31 7:36:25 阅读更多 →
从零实现C++双向链表:深入理解STL list设计与内存管理

从零实现C++双向链表:深入理解STL list设计与内存管理

1. 项目概述:为什么我们需要自己实现一个List? 在C/C的世界里, std::vector 和 std::list 是标准库中两个最常用的顺序容器。 vector 以其连续内存带来的高速随机访问能力著称,而 list 则是一个经典的双向链表实现&#x…

2026/7/31 7:36:25 阅读更多 →
为什么说APAxpo是粤港澳大湾区规模最大、影响力最强的汽车改装盛会?

为什么说APAxpo是粤港澳大湾区规模最大、影响力最强的汽车改装盛会?

最近几年,汽车改装行业的“阳光化”进程明显加速。政策红利持续释放,消费需求全面升级,一个万亿级市场正在大湾区悄然崛起。而在这一轮浪潮中,一个展会品牌异军突起——APAxpo佛山改装展,被行业内外公认为“大湾区规模…

2026/7/31 7:36:25 阅读更多 →

最新新闻

可兼容issi低功耗SRAM/nvSRAM的STT-MRAM替代嵌入式存储方案

可兼容issi低功耗SRAM/nvSRAM的STT-MRAM替代嵌入式存储方案

作为高性能工业级存储方案,RAMSUN推出的S3R8016并口STT-MRAM,是一款容量8Mbit的并行异步接口全随机存取存储器,可精准对标并替代同功能FRAM、低功耗SRAM及nvSRAM芯片,适配各类传统存储替换场景。 issi低功耗SRAM产品支持x16、x8两…

2026/7/31 8:06:35 阅读更多 →
一个能把漏洞报告交到你手里的YASA SKILL

一个能把漏洞报告交到你手里的YASA SKILL

本文作者:Zoar-yalz,浙江大学硕士生,研究方向为编译优化、软件分析等。github主页:github.com/Zoar-yalz 1. 这是什么? YASA Checker 是一个 OpenCode 智能体 Skill,它把三种分析手段串联成自动化管线&…

2026/7/31 8:06:35 阅读更多 →
STM32嵌入式开发:数组查表法实现多级菜单系统设计

STM32嵌入式开发:数组查表法实现多级菜单系统设计

1. 项目概述:为什么需要“数组查表法”菜单?在嵌入式开发,尤其是基于STM32这类资源受限的MCU项目中,人机交互(HMI)是一个绕不开的环节。很多项目都需要一个菜单系统,让用户能够通过按键&#xf…

2026/7/31 8:06:35 阅读更多 →
查重率亮红灯反复修改,有哪些真正值得信赖的的降AIGC平台推荐?

查重率亮红灯反复修改,有哪些真正值得信赖的的降AIGC平台推荐?

毕业论文降AIGC率,优先选语义优化 AI痕迹清除 降重效果稳定的工具,免费与付费结合最实用。下面按中文、英文、免费/付费分类推荐,附实测效果与适用场景。 一、中文论文降重工具(最常用) 1. 千笔AI(综合全…

2026/7/31 8:06:35 阅读更多 →
半导体器件实战指南:从数据手册到PCB布局的硬件设计核心

半导体器件实战指南:从数据手册到PCB布局的硬件设计核心

1. 从“黑盒子”到“积木块”:我们为什么需要理解半导体器件? 如果你问一个刚入行的硬件工程师,或者一个对电子感兴趣的朋友,什么是半导体器件,得到的答案大概率是“二极管、三极管、MOS管”这些名词。这没错&#xff…

2026/7/31 8:06:35 阅读更多 →
C++实现高斯混合模型:从概率原理到高性能代码实战

C++实现高斯混合模型:从概率原理到高性能代码实战

1. 项目概述:从聚类难题到概率模型的跨越在数据处理和机器学习的日常工作中,我们常常会遇到这样的场景:给你一堆看起来混在一起的数据点,比如不同品种鸢尾花的花瓣尺寸、用户行为日志的混合模式,或者图像中颜色相近但属…

2026/7/31 8:05:35 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻