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

MySQL 数据库约束知识点整理(主键、自增、外键完整案例)

文章目录

  • 一、数据库约束
    • 1.1 常见约束类型
    • 1.2 NOT NULL
    • 1.3 UNIQUE
    • 1.4 DEFAULT
    • 1.5 主键(PRIMARY KEY)
    • 1.6 外键(FOREIGN KEY)

一、数据库约束

是关系型数据库的一个重要功能,约束一般是指定在上的。

1.1 常见约束类型

约束类型作用
NOT NULL字段不能为空
UNIQUE字段值不能重复
PRIMARY KEY唯一 + 非空
FOREIGN KEY建立表与表之间的关联
DEFAULT设置默认值

约束的作用:

保证数据的准确性和完整性。


1.2 NOT NULL

  • NOT NULL 表示某列不能存储NULL值
  • NOT NULL的作用:

如果要把一个列定义为必填项,就可以使用NOT NULL非空约束

示例:

  • 在创建表时,可以在相应字段加入约束类型
    示例:

NO 表示当前列不能为空
YES 表示当前列可以为空

  • 写入数据时会报错,提示不能写入NULL值,这是因为数据库做了校验

1.3 UNIQUE

  • 保证某列的每行必须有唯一值,也就是说某列的值在整个表中不能重复
  • 示例:

    所以需要加入unique约束去创建表
    示例:

    示例:

    ⚠️ 注意:NULL值可以重复插入

1.4 DEFAULT

  • 规定没有给列赋值时的默认值
  • 示例:
  • 在插入时,只指定了id,没有指定name,此时name用默认值填充
  • 示例:

    ⚠️ 注意:
    虽然指定了默认约束,但是当我们手动将这一列的值设置为NULL时,插入的值依然是NULL,因为此时的这个NULL值是我们手动指定的,也可以理解为我们想要的值。用户指定的优先级高于默认约束

示例:


1.5 主键(PRIMARY KEY)

NOT NULL 和 UNIQUE的结合,有助于更容易快速的找到表中特定的记录。
特点:

  • 唯一
  • 不能为空
  • 一张表只能有一个主键

示例:

createtablestudent(idint,namevarchar(50),primarykey(id));
  • id列指定的非空和唯一约束,列被表示为了PRI,表示他是一个主键
    示例:

  • 主键两个约束同时生效

    ⚠️ 注意:
    设置主键的核心作用
    唯一标识一条记录 + 提高查询效率 + 维护数据完整性 + 支持表关联
    在实际开发中,每张表都应该设计主键(一般使用自增 id)。

  • 让数据库帮我们去维护主键的增长,在插入的时候,先找到最大值,然后在这个基础上加1,生成一个新的值,作为新一个数据行主键(id列)的值。
    示例:

  • 全列插入
    在写入数据时,不具体指定主键列的值,而是用NULL代替
    示例:

  • 指定列插入
    当指定列插入,也会自动生成id,作为数据行的主键
    示例:

  • 可以指定主键
    可以指定主键,只要主键不重复即可
    示例:

  • 主键值自增1
    在最大值的基础上加1,所以主键值在数据表中有可能是不连续的

  • 一个表中不允许有两个主键

  • 示例:

    ⚠️ 注意:一个主键可以同时包含多个列(复合主键)
    示例:

  • 这里id和name复合主键中的列值都相同,所以被判定为相同,第二条数据插入失败


1.6 外键(FOREIGN KEY)

外键用于建立两张表之间的联系。

foreignkey(字段名)references主表()

说明:

  • foreign key:创建外键的关键字
  • 字段名:表示当 前表中哪个字段与主表建立主外键关系
  • references:关键字,表示后面要引用哪个表中的哪个列
  • 主表(列):指定主表和相应的列

⚠️ 注意:

  • 外键字段必须与被关联字段类型一致
  • 用于维护数据之间的关联关系

示例:
创建班级表和学生表(但不创建外键)
学生表中有一个字段是班级编号,写入数据时,这个编号必须是有效的

在class表中插入几个班级

在student表中插入了编号5这个班级,但这个班级根本不存在,此时,数据依然能写入成功,是不合理的。

示例:
创建班级表和学生表(但创建外键)




这里不存在编号为5的班级,所以插入数据失败。
⚠️ 注意
当子表中存在对主表的依赖的时候,能不能删除主表中相应的记录

依然会报主外键关系的错误。
所以如果想要删除主表中的记录,子表中不能有对该记录的依赖。也就意味着,需要先删除子表中的记录,再去删主表中的记录。


http://www.jsqmd.com/news/375670/

相关文章:

  • 实测不踩雷!3款好用不伤皮肤的手动剃须刀,敏感肌也能放心冲 - 品牌测评鉴赏家
  • 结构化数据 vs 非结构化数据:大数据领域的核心差异与技术选型
  • 实测20+款!2026手动剃须刀品牌排名,新手/敏感肌闭眼入不踩雷 - 品牌测评鉴赏家
  • 京东e卡回收正规平台价格如何,怎么选择?这些门道你得知道! - 京顺回收
  • 基于Nodejs+vue+ElementUI的扫码解锁共享单车管理系统设计与实现
  • 实测不踩雷!2026高端手动剃须刀品牌推荐,精致男士必入 - 品牌测评鉴赏家
  • 电商数据分析的未来挑战与机遇
  • 基于Nodejs+vue+ElementUI的人脸识别的无人值守自习室预约签到系统的设计与实现
  • 巴菲特-芒格的智慧城市投资:城市化进程中的机遇
  • 【YOLOv11多模态涨点改进】独家创新首发| CVPR 2024 | 引入BIEF特征交互融合模块, 提升红外与可见光多模态融合,利用跨模态注意力机制挖掘互补信息,助力YOLO多模态检测高效涨点
  • 【游记】2025,在SD的最后一天
  • 倒序思想|hash
  • 提示工程架构师:打造高性能提示缓存机制的秘诀
  • 【YOLOv8多模态涨点改进】独家创新首发| CVPR 2025 | 引入FDSM频率域动态地选择模块,高效融合红外和可见光多模态特征,精准保留有用信息、抑制冗余与噪声,助力目标检测、图像分割、分类
  • AI提效神器|2026年6款宝藏PPT生成软件推荐,程序员/职场人速藏 - 品牌测评鉴赏家
  • 【YOLOv8多模态涨点改进】CVPR 2025 | 引入RLAB残差线性注意力块,有效融合并强调多尺度特征,多种创新改进点,助力多模态融合目标检测、图像分割、图像分类,医学图像分割等任务有效涨点
  • 大数据领域数据编目的最佳实践分享
  • Java毕设项目:基于springboot的陶瓷售卖系统(源码+文档,讲解、调试运行,定制等)
  • 告别熬夜做PPT!2026AI博主亲测6款AI PPT工具,效率拉满200% - 品牌测评鉴赏家
  • 【YOLOv11多模态涨点改进】独家创新首发| CVPR 2025 | 引入FDSM频率域动态地选择模块,高效融合红外和可见光多模态特征,精准保留有用信息、抑制冗余与噪声,助力目标检测、图像分割、分类
  • 爬虫基础
  • 【毕业设计】基于springboot的陶瓷售卖系统(源码+文档+远程调试,全bao定制等)
  • 【YOLOv11多模态涨点改进】独家复现创新首发 | CVPR 2025 | 引入 FEFM 频率穷举融合机制和二次创新CFEM交叉融合增强模块,适合红外与可见光融合,多模态融合目标检测、实例分割
  • 【YOLOv11多模态涨点改进】CVPR 2025 | 引入RLAB残差线性注意力块,有效融合并强调多尺度特征,多种创新改进点,助力多模态融合目标检测、图像分割、图像分类,医学图像分割等任务有效涨点
  • 2026国内最新汽车胶生产厂家TOP5推荐:服务深度交覆盖江苏、山东、济南、云南等地,汽车胶优质服务商权威榜单发布,多场景适配助力品质升级 - 品牌推荐2026
  • 完整教程:C#低功耗工控通信实战|MQTT-SN协议全解析 + 无线传感器网络(WSN)对接完整落地
  • 移动云政务智能体是做什么的?
  • RAG 时代的“破壁人”:为什么你的大模型应用急需 Docling?
  • Prometheus、Cadvisor和Grafana体系完整学习手册 - 实践
  • 《程序员修炼之道:从小工到专家》读后感