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

news2024/11/26 14:26:52

文章目录

  • 前言
  • 一、约束类型
  • 二、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

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

三、UNIQUE

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

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


四、DEFAULT

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

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


五、PRIMARY KEY(重点)

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

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

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

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

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


1, 自增主键

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

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

六、FOREIGN KEY (重点)

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

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

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

在这里插入图片描述

1, 插入数据

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

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


2, 删除数据

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

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

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

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

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


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

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

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

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

根据外键的约束来看, 确实是没办法删, 而且外键约束也不能撤销, 正确的做法是, 给商品表多加一个"是否下架"的字段来表示该商品是否被删除, 这种做法称作"逻辑删除", 如果该商品的"是否下架"这个字段为"已下架", 则不在商品列表中显示即可


总结

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

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


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

在这里插入图片描述

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

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

相关文章

chatgpt赋能python:Python词法分析:理解语言的起点

Python词法分析:理解语言的起点 在计算机科学中,词法分析(也称为词法分析器)是解析编程语言时的重要步骤之一。词法分析器将程序代码转换为由单词组成的序列(称为标记或词法单元),为编译器和解…

chatgpt赋能python:Python转变为大写:学习如何使用Python中的str.upper()

Python 转变为大写:学习如何使用 Python 中的 str.upper() 作为一名有10年python编程经验的工程师,我可以肯定地说,Python 作为一门流行的编程语言,在全球范围内得到了广泛的应用。除了成为数据科学和机器学习的首选语言之外&…

设置ssh免密码登陆linux的配置步骤

概述 生成私钥文件 在客户端终端下输入以下命令 ssh-keygen -t rsa每次执行 ssh-keygen -t rsa 产生的私钥文件都会不同 如果文件"~/.ssh/id_rsa"存在,会提示是否覆盖该文件,此时可选择"n"不覆盖该文件而使用已有的id_rsa文件 如…

钉钉群通过短信转发器接收手机短信消息

1.短信转发器官网下载 下载地址 首发地址:https://github.com/pppscn/SmsForwarder/releases国内镜像:https://gitee.com/pp/SmsForwarder/releases网盘下载:https://wws.lanzoui.com/b025yl86h 访问密码:pppscn 使用文档 首发…

计算机网络 - 网络层的控制平面

Introduction 控制平面设计很多路由的算法, 然后计算出路由表给数据平面转发跟路由的, 传统方式的控制平面是每一个路由器都有一个控制平面, SDN方式的话通常是集中的remote管理, 一个控制平面控制多个本地代理CA - (Control Agent) 路由选择算法 路由route的概念 按照某种…

chatgpt赋能python:Python词性分析:一步步了解自然语言处理技术

Python词性分析:一步步了解自然语言处理技术 Python是一种高级编程语言,拥有广泛的应用领域。自然语言处理技术是其中一个重要的领域,它包含了词性分析、命名实体识别、句法分析等多项任务。词性分析是自然语言处理中的基本任务之一&#xf…

chatgpt赋能python:Python请求头——让你的网络请求更有效率

Python请求头——让你的网络请求更有效率 网络请求是现代应用程序的核心。但是,如果你不了解Python请求头的概念和用途,那么你可能会面临一些棘手的问题。在本文中,我们将深入探讨Python请求头,了解其作用、语法和最佳实践。 什…

计算机毕业论文选题推荐|软件工程|系列十一

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)系统的校园社交…

如何在华为OD机试中获得满分?Java实现【字符串重新排序】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…

如何在华为OD机试中获得满分?Java实现【静态代码扫描服务】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

【iOS】—— Tagged Pointer对象

文章目录 关于Tagged PointerNSTaggedPointer示例TaggedPointer 结构Tagged Pointer特点注意事项isa指针64位下的isa指针优化 本来打算细看一下weak的底层原理,看到了出现了很多次Tagged Pointer对象,就先来学一下Tagged Pointer,在之前刚学习…

chatgpt赋能python:Python隐藏CMD窗口

Python隐藏CMD窗口 Python是一种高级编程语言,已被广泛用于各种领域,从Web开发到数据科学。Python的一个非常有用的特性是它可以通过CMD窗口运行脚本,但在某些情况下,隐藏CMD窗口可能是必要的。 为什么要隐藏CMD窗口&#xff1f…

如何在华为OD机试中获得满分?Java实现【微服务的集成测试】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…

一图看懂 pycodestyle 模块:一个检查Python代码是否符合PEP8风格约定的工具,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pycodestyle 模块:一个检查Python代码是否符合PEP8风格约定的工具,资料整理笔记(大全) 🧊摘要🧊模块…

chatgpt赋能python:Python中数字转换的完整指南

Python中数字转换的完整指南 转换数字是Python编程过程中经常需要的操作之一。Python提供了许多内置函数和库,可以方便地将数字转换为各种格式和数据类型。在本文中,我们将介绍Python中数字转换的完整指南,包括各种转换方法和最佳实践。 内…

chatgpt赋能Python-python_读取bin

介绍 Python 作为一种高级编程语言,已经被广泛地应用在各种领域,包括科学计算、人工智能、Web 开发等等。在这些领域中,二进制文件的处理是不可避免的。Python 也提供了一些库和工具,让我们可以方便地读取和处理二进制文件。本文…

ChatGPT与讯飞星火实测对比

文章目录 一、推理测试测试提示词1:假设树上有10只鸟,开枪打死1只,那么树上还有几只鸟?- 测试提示词2:一艘船10天可以渡过太平洋,请计算10艘船多少天可以渡过太平洋。测试提示词3:我爸妈结婚的时候为什么不…

vue-i18n安装配置使用示例,并介绍在模版文本、组件方法、js,f方法里的使用

vue-i18n是一个项目的国际化组件&#xff0c;可以切换多个语言版本,很多vue项目都是用这个插件来处理语言切换的。 基本操作 1&#xff0c;安装引用&#xff1a; $ npm install vue-i18n<script src"https://unpkg.com/vue/dist/vue.js"></script> &…

Radxa ROCK 5A 开箱 vs 树莓派

Rock5 Model A 是一款高性能的单板计算机&#xff0c;它采用了 RK3588S (8nm LP 制程&#xff09;处理器&#xff0c;具有 4 个高达 2.4GHz 的 ARM Cortex-A76 CPU 核心、4 个高达 1.8GHz 的 Cortex-A55 内核和 Mali-G610 MP4 GPU。更重要的是&#xff0c;它还有一个高达 6TOPS…

chatgpt赋能python:Python词频分析:为什么Python是数据科学家和工程师的首选?

Python 词频分析&#xff1a;为什么 Python 是数据科学家和工程师的首选&#xff1f; Python 是一种通用、开放源代码、高级编程语言&#xff0c;近年来一直是数据科学和工程领域中最受欢迎的编程语言之一。Python 强大的数据处理能力迅速成为行业的首选&#xff0c;但是仅靠这…