期末复习总结!!【MySQL】五种约束类型, 主键和外键的使用方式(重点)

news2024/9/20 10:58:44

文章目录

  • 前言
  • 一、约束类型
  • 二、NOT NULL
  • 三、UNIQUE
  • 四、DEFAULT
  • 五、PRIMARY KEY(重点)
    • 1, 自增主键
  • 六、FOREIGN KEY (重点)
    • 1, 插入数据
    • 2, 删除数据
    • 3, 关于外键约束下删除数据的思考
  • 总结


前言

各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你:
📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)


提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎批评指点~ 废话不多说,直接上干货!

一、约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

约束需要在创建表的时候给字段加上的, 也可以创建表后使用 alter 修改表结构, 本篇都使用第一种方式


二、NOT NULL

  • not null 约束了数据不能为空, 首先创建一张学生表, 学生的字段包含 id 和姓名, 我们给 id 这个字段加上 not null 约束 :
    在这里插入图片描述
  • 查看表结构 :
    在这里插入图片描述
  • 分别插入 id 不为 null , 和 id 为 null 的两条数据看效果 :
    在这里插入图片描述

三、UNIQUE

  • unique 约束了数据不能重复, 把刚才的表删掉, 把学生表中 id 这个字段加上 unique 约束, id 一人一个不能重复, 非常合理 :
    在这里插入图片描述
  • 查看表结构 :
    在这里插入图片描述
  • 分别插入 id 不重复和 id 重复的两条数据看效果 :
    在这里插入图片描述

设置了 unique 约束之后, 插入某个数据之前, 系统会先查询, 如果已经有了该数据, 则不能再插入


四、DEFAULT

  • default 可以设置数据为空时的默认值, 把刚刚的表删掉, 给 name 这个字段加上默认值"无名氏" :
    在这里插入图片描述
  • 查看表结构 : 在这里插入图片描述
  • 用指定列插入的方式只插入 id, 看效果 :
    在这里插入图片描述

注意, 如果不手动设定默认值, 那么默认值为 NULL


五、PRIMARY KEY(重点)

primary key (主键约束)是一条数据的身份标识, 类似于通过身份证就能找到唯一的人, 通过快递单号就能找到唯一的包裹, 通过订单号就能找到唯一的订单

一张表只能有一个列为主键!!

  • primary key (主键约束) 即不允许为空, 也不允许重复, 所以是 not null 和 unique 这两个约束的结合体, 通过主键能找到唯一的一行数据, 因此主键在索引中至关重要
    在学生表中, 我们把 id 设置成主键, 即便有无数个重名的学生, 通过 id 就找到唯一的学生 :
    在这里插入图片描述
  • 查看表结构 :
    在这里插入图片描述
  • 我们分别插入不为空且不重复的数据, 为空的数据, 重复的三条数据, 看效果 :
    在这里插入图片描述

和 unique 约束一样, 主键的字段插入数据之前, 系统会先进行查询

设置了主键之后, 插入什么数据还是取决于程序员如何编写 sql, 程序员也是有可能写错的, 当主键是数字时, MySQL 就贴心了提供了一个机制 : 自增主键(auto_increment)


1, 自增主键

设置了自增主键之后, 程序员不需要再手动指定主键的值, 插入数据对应字段不给值时, 使用最大值 +1。

  • 给 id 设置成自增主键 :
    在这里插入图片描述
  • 查看表结构 :
    在这里插入图片描述
  • 不指定 id 的值(写成 null), 让自增主键机制帮我们分配 :
    在这里插入图片描述
  • 也可以自己分配一个值之后, 再让自增主键帮我们分配 :
    在这里插入图片描述
  • 可以看到主键从 100 开始分配了, 那 3 ~ 100 之间的值就空出来了, 如果再插入一条数据, 把主键的值设置为 4 , 能成功吗 ?
    在这里插入图片描述

六、FOREIGN KEY (重点)

foreign key (外键)用于关联其他表的主键或唯一键, 在多表查询中也至关重要

sql 语句 : foreign key (列名) references 其他表 (列名);

比如现在有一张学生表和班级表 :
在这里插入图片描述
在这里插入图片描述
创建班级表和学生表, 设置主键和外键 :

在这里插入图片描述

1, 插入数据

  • 往学生表中插入数据, 发现报错了
    在这里插入图片描述
    在这里插入图片描述
  • 所以要先在班级表(父表)中插入主键数据后, 再插入学生表(子表)的主键数据
    在这里插入图片描述
  • 查看表中数据 :
    在这里插入图片描述

当外键关联了其他表中的主键, 就有了父表子表之分
从子表中插外键数据时, 会先从父表中的主键数据中查询是否存在该记录


2, 删除数据

  • 尝试删除班级表(父表)中 classId 为 1 的这条记录 :
    在这里插入图片描述

在插入数据时, 父表约束子表, 要先插入父表中主键数据
在删除数据时, 子表约束父表, 要先删除子表中外键数据

  • 先删除子表, 再删除父表 :
    在这里插入图片描述

这样的规则其实也比较合理, 如果在子表中还有外键约束的时候就把与之关联的父表中主键的数据删了, 子表中的这个外键就不能再使用了

但是这又引来了一个问题, 如果有时确实需要删除父表中的主键数据怎么办呢?


3, 关于外键约束下删除数据的思考

以电商网站为例, 商家至少要有一张商品表和一张订单信息表, 订单信息表中一定要有购买的商品的信息, 以方便顾客回购商品

如图 :
在这里插入图片描述
如果过了一段时间后, 顾客想回购这件商品, 但是这件商品下架了, 商品表的该商品的记录肯定是要删除, 但是订单表的该订单信息不能删除

现在的情况就是, 如何在不删除订单表(子表)中这条数据的前提下, 删除商品表(父表)中的这条数据?

根据外键的约束来看, 确实是没办法删, 而且外键约束也不能撤销, 正确的做法是, 给商品表多加一个"是否下架"的字段来表示该商品是否被删除

这种做法称作"逻辑删除", 如果该商品的"是否下架"这个字段为"已下架", 则不在商品列表中显示即可


总结

以上就是本篇的全部内容, 主要介绍了五种约束类型, 其中主键和外键最重要, 要重点理解他们的 sql 语法和使用时的注意事项

如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~


上山总比下山辛苦
下篇文章见

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/565469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库图书管理系统设计报告(基于软件工程)

文章目录 一、实验目的二、实验内容选题方向设计背景第一章 需求分析第一部分 系统设计目标第二部分 功能需求分析1.系统的功能描述2.主要的操作描述3.数据流图的演示(1)、顶层流程图(2)、第一层…

JAVA开发(记一次删除完全相同pgSQL数据库记录只保留一条)

进行数据管理时,无效数据可能会对生产力和决策质量造成严重的影响。如何发现和处理无效数据变得愈发重要。一起来唠唠你会如何处理无效数据吧~ 方向一:介绍无效数据的概念 最近遇到了pg数据库表中的大量数据重复了,需要删除其中的一条。一条…

数据库事务基本概念介绍

一、数据库事务是什么? 我们先不说数据库中的事务,我们看下百度对事务这个词汇的解释: 事务: 也就是说,事务就是,要做或者所做的事情 好的我们再联系一下生活中平常做的一些事情 例如 小 x 去 爱存不存的…

快速指南:在CentOS 7上安装Redis,构建高性能键值存储数据库

导航目录 1、Redis安装并使用1.1、下载安装包1.2、重命名和移动文件1.3、redis编译安装1.4、redis启动1.5、设置后台启动redis1.6、设置redis密码1.7、设置redis服务远程访问1.8、redis服务的客户端连接测试1.9、命令行使用1.10、清理缓存 Redis(Remote Dictionary …

opencv_c++学习(二十一)

一、图像的轮廓检测 轮廓检测函数: findContours(lnputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode, int method, Point offset Point())image:输入图像,数据类型为CV_8U的单通道灰度图像或者二值化图像。contours:检…

mPython软件使用指南

①软件界面 一、软件界面的介绍 1.模式切换 硬件编程 Python3.6 Jupyter python3.6模式细节补充(一般不使用该模式,此处可跳过) Python3.6模式的界面 左侧指令分类栏 Python3.6模式的图形化指令分类分为: Python语法基础相关指令&…

Ajax 获取 JSON数据

文章目录 Ajax获取JSON数据 Ajax获取JSON数据 Ajax 全称“Asynchronous JavaScript and XML”,译为“异步 JavaScript 和 XML”,程序员们习惯称之为“阿贾克斯”,通过 Ajax 我们可以异步在服务器与客户端之间传递数据。在 Ajax 中&#xff0…

机器学习期末复习 贝叶斯分类器

先验概率与后验概率 先验概率:对于某一个概率事件,我们都会有基于自己已有的知识,对于这个概率事件会分别以什么概率出现各种结果会有一个预先的估计,而这个估计并未考虑到任何相关因素。 对于分类数据来说,先验概率就…

【lager】日志系统1:允许多个日志源向多个最终用户进行日志记录 windows cmake构建

【xerces】xerces-c-3.2.4 版本的cmake windows vs2022 构建 lager Light-weight Accumulator Gathering Efficiently in Real-time lagerLAGER(实时高效收集的轻量级累加器)是一个可靠的日志系统,旨在允许多个日志源向多个最终用户进行日志记录。该设计文档概述了整个系统的…

Android---APK 瘦身

在 APP 开发过程中,随着业务迭代,apk 体积逐渐变大。项目中累积的无用资源,未压缩的图片资源等,都为 apk 带来了不必要的体积增加。而 APK 的大小会影响应用加载速度、使用的内存量以及消耗的电量。 APK 结构 APK 文件由一个 Zip…

浅析Koa2中控制器

控制器 什么是控制器 拿到路由分配的任务,并执行 路由的功能是根据不同的 url, 来分配不同的任务。 控制器是拿到路由分配的任务并执行,是注册在路由中的中间件。 所以在 koa 中, 控制器也是一个中间件。 为什么要使用控制器 获取HTTP请求参数处理…

article-码垛机器人admas仿真

按照运动学仿真的类似步骤为机器人添加材料、运动副和关节驱动,给机器人手腕末端施加50N最大负载,仿真模型如图5-17。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXYQVZPq-1684936426972)(data:image/svgxml;utf8, )] 图…

OpenGL之纹理

文章目录 什么是纹理加载与创建纹理stb_image.h加载并生成纹理 纹理环绕方式纹理过滤多级渐远纹理 纹理单元 什么是纹理 我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实&a…

unity制作一款塔防游戏

文章目录 介绍寻路系统怪物生成器制作3种初级炮台、3种升级炮台设置炮台属性选择炮台,添加监听事件炮弹追踪攻击敌人拖动鼠标实现相机视角转换鼠标光标放在cube上变色文字动画 介绍 关键技术: 寻路系统 生成怪物算法 粒子系统 line renderer制作追踪射线…

python基本操作1(速通版)

目录 一、input输入函数 二、格式化字符输出 三、函数的基本操作 1.return返回值的问题 2.参数传递 四、运算符 1.关系比较符 2.逻辑运算符 五、if语句 六、随机数 七、循环 1.while语句的基本应用 2.break语句 2.continue语句 3.猜拳游戏 4.三目运算符 6.for…

让input框只输入英文

解决扫码枪在中文输入法时扫码冲突 扫码枪在扫完码时会自动回车,这时如果是中文输入法就会触发输入法联想,再加一个回车,那么input框输入的就成中文了。如果可以控制input框只能输入英文那就好了。css有一个属性(ime-mode&#xf…

ChatGpt论文指令,很全!

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 ChatGPT的能力大家肯定都听说过,很多学生应该都亲身体验过。它在自然语言处理方面的出色 除了写代码 写论文也是超…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第4套

少儿编程 蓝桥杯青少组计算思维真题及详细解析第4套 1、下面哪个图形与其它图形不同 A、 B、 C、 D、 答案:D 考点分析:主要考查小朋友们的观察能力,从给定的图中可以看到前三个选项都是90度直角,最后一个是锐角,所以答案D 2、下列哪个选项是由下图旋转得到的

位运算【算法基础】

目录 知识点: 题目: 模板 关于为什么负数要用补码 知识点: 如果想看整数n的二进制表示中的第k位(从0开始)是几? (1)把第k位右移到个位n>>k (2)看x…

大模型时代,「重识」云知声

在山海大模型发布会现场,黄伟有一句话令人印象深刻,“云知声的过去十年,就是为山海而生。 作者| 皮爷 出品|产业家 “谁能做成中国最好的大模型?”在今年3月一个北京投资人的内部分享会上,有人满怀期待地提出这样…