【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/10/30 21:04:11 阅读更多 →
从零实现C++双向链表:深入理解STL list设计与内存管理

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

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

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

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

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

2026/10/31 7:58:18 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/31 0:19:11 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/31 10:20:19 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/31 10:20:23 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/31 0:59:28 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/31 10:30:19 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/31 9:29:43 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 17:32:24 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 11:00:40 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 0:09:01 阅读更多 →