当前位置: 首页 > news >正文

【MySQL6】约束

一、约束概述

1. 什么是约束

约束是作用于数据表字段上的规则,用于限制存入表中的数据。

2. 使用目的

保障数据库数据的正确性、有效性、完整性,防止脏数据入库。

3. 六大约束分类汇总

表格

约束关键字约束名称作用说明
NOT NULL非空约束字段值不能为 NULL,必须填写
UNIQUE唯一约束字段所有值不能重复,允许一个 NULL
PRIMARY KEY主键约束等价NOT NULL + UNIQUE,一张表仅一个主键,常搭配自增AUTO_INCREMENT
DEFAULT默认约束不主动给字段传值时,自动填充预设默认值
CHECK检查约束限定字段值满足指定条件(MySQL8.0 + 完整支持)
FOREIGN KEY外键约束关联两张表,保证父子表数据一致性

二、前五类单表约束实战(非空 / 唯一 / 主键 / 默认 / 检查)

1. 需求说明(user 用户表)

表格

字段类型约束规则
idint主键、自增、唯一不为空
namevarchar(10)非空 + 全局唯一
ageint年龄范围:0 < age ≤ 120
statuschar(1)不传值默认填充'1'
genderchar(1)无约束,可空可重复

2. 建表 SQL(修正 MySQL 语法问题)

原代码两处语法坑:

  1. user是 MySQL 系统关键字,表名必须用反引号`user`
  2. SQL 判断逻辑符不能写&&,标准使用AND

sql

CREATE 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检查约束】:age=121超过上限120,插入失败 INSERT INTO `user`(name,age,status,gender) VALUES ('Tom5',121,'1','男'); -- 7. 合法数据,未传入status,自动填充默认值'1'(DEFAULT默认约束生效) INSERT INTO `user`(name,age,gender) VALUES ('Tom5',120,'男');

单表约束总结

  1. NOT NULL:字段禁止为空;
  2. UNIQUE:字段值全局唯一;
  3. PRIMARY KEY主键:自带非空 + 唯一,搭配AUTO_INCREMENT实现自增 ID;
  4. DEFAULT:省略字段传参时自动填充默认值;
  5. CHECK:限制字段数值区间、格式,过滤非法数据。

三、外键约束 FOREIGN KEY(多表关联约束)

1. 外键核心概念

  1. 作用:建立两张表的数据关联,维护父子表数据一致性、完整性;
  2. 父表(主表):被引用的表(示例:dept部门表);
  3. 子表(从表):包含外键字段、引用父表主键的表(示例:emp员工表);
  4. 无外键时,可随意插入不存在的部门 ID,会产生无效脏数据;添加外键后会校验关联关系。

2. 父子表建表与基础数据

父表:dept 部门表

sql

CREATE 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 用于关联部门 id)

sql

CREATE 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)建表后追加外键

sql

ALTER 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)删除已存在的外键

sql

ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept_id;

4. 外键更新 / 删除五种行为(ON UPDATE / ON DELETE)

表格

行为参数规则说明
NO ACTION默认行为,父表数据被删 / 改,子表存在关联数据时,禁止操作
RESTRICT和 NO ACTION 效果一致,MySQL 标准推荐写法
CASCADE级联操作:父表修改 / 删除,同步更新 / 删除子表关联记录
SET NULL父表修改 / 删除,子表对应外键字段自动置为 NULL
SET DEFAULT父表变更时,子表外键填充预设默认值(极少使用)
示例 1:级联更新、级联删除 CASCADE

sql

ALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE;

效果:修改 / 删除 dept 表部门 id,emp 表内对应员工dept_id同步修改 / 删除。

示例 2:置空 SET NULL

sql

ALTER 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 大类常用约束,分为两大模块:

  1. 单表字段约束(作用于单张表)
    • NOT NULL 非空约束
    • UNIQUE 唯一约束
    • PRIMARY KEY 主键约束
    • DEFAULT 默认约束
    • CHECK 检查约束
  2. 多表关联约束(跨两张表)
    • FOREIGN KEY 外键约束,搭配 5 种删除更新行为控制父子表联动逻辑
http://www.jsqmd.com/news/1299053/

相关文章:

  • 同人创作场景分析:从角色互动到情感共鸣的创作指南
  • Java实现Word模板动态生成与OSS存储实践
  • 6个AI写毕业论文工具:20分钟出初稿,文献真实可查 - 麟书学长
  • 推荐一下有名的宾馆电地暖企业:优选 - 品牌推广大师
  • Meta Q2财报:营收增长但净利润下降,AI布局广却致股价盘后蒸发超千亿美元!
  • 还在花50%时间找上下文?AI Agent如何把问答排障审查串成闭环
  • Uniapp UI框架选型指南:六大开源库深度对比与实战集成
  • 超节点:被逼出的算力创新,中国厂商积极布局,大规模落地仍面临多重挑战
  • QT开发实战:QLabel与QLineEdit深度解析与性能优化
  • 2026年AI驱动型碳管理平台推荐:从数据采集到智能决策的全链路产品对比
  • 2026 年现阶段中原有实力的充电桩箱式变压器供应商深度解析与优选指南,小区楼下莫名跳闸?原来这台不起眼的设备才是幕后黑手-中能变压器 - 鉴选官
  • PyTorch环境配置全解析:从虚拟环境到CUDA版本匹配的避坑指南
  • LaTeX参考文献管理:从cite、natbib到biblatex的完整指南
  • 2026年7月耐候景观批发厂家推荐,耐候雕塑/耐候花盆/耐候钢雕塑/耐候钢板幕墻/耐候板景观墙,耐候景观批发厂家怎么选择 - 品牌推荐师
  • xAI推新一代语音识别模型Grok Voice Think Fast2.0:性能全面升级,定价每分钟0.08美元
  • 我最讨厌的办公流程,终于被WorkBuddy干掉了
  • 数据结构 1
  • 风机主轴烧结磨损,在线修复当天复产
  • 金蝶云星辰社保公积金计提与缴纳凭证操作全解析
  • 洛雪音乐助手:跨平台无损音乐下载与歌单同步全攻略
  • 不锈钢304石英砂过滤器在印染纺织行业可用-杭州鑫凯
  • 2019电赛D题:基于STM32与FFT的电路特性测试仪设计与实现
  • 南华大学附属长沙中心医院团队Aging Cell:心肌衰老为什么越拖越难逆?USP45-CFTR轴给出线索
  • 51单片机双机通信实战:UART串口协议、RS-485与抗干扰设计
  • 基于STM32的六足机器人毕业设计:从步态算法到系统集成全解析
  • Unity游戏动态翻译插件XUnity.AutoTranslator原理与实战部署指南
  • G-Helper终极指南:解锁华硕笔记本极致性能的轻量级革命
  • 电动汽车充放电调度中的双层优化与MATLAB实现
  • 申泰SFM-125系列连接器选型_国产替代方案参考
  • 学会这两套写法,标书质量直接超越同行