Linux下学 〖MySQL 〗表的属性之约束条件(下)(自增长auto_increament、唯一键unique key、外键foreign key)

news2024/12/23 13:42:19

绪论​
在这里插入图片描述
每日激励:“不是看到希望才坚持,而是坚持了才有希望。—Jack”

绪论​:
本章是约束的下半篇,它将带你认识到一些在字段中非常常用的约束条件,自增长AUTO_CREMENT、唯一键UNIQUE KEY 和 外键FOREIGN KEY这三个。它们是我们学习MySQL DDL操作中非常重要且关键的一环,当我们将本章和之前文章也学完后你就对DDL基本完成了,下面我将继续更新在表中查询的高级方法,敬请期待!
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。


1. 自增长AUTO_INCREMENT

auto_increment约束的作用:

当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:

  • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长

实操:

  1. 创建表tt21,并设置
    id为主键和自增长约束
    在这里插入图片描述
  2. 当插入数据时:
    你不填写值时id就会自增长
    在这里插入图片描述
  3. 当你设置id后:id是能插入的
    在这里插入图片描述
  4. 再次插入数据后id的自增长会从你插入的值开始
    在这里插入图片描述

其中表结构中有一个AUTO_INCREMENT会记录下一次自增长的值
这也表示着我们在创建表时同样也是能设置自增长开始的值的
如下图设置为从500开始:
在这里插入图片描述
其中注意的是,对于自增长的字段必须得设置为主键:
在这里插入图片描述

附:直接查看表的下一个自增长的值:

select last_insert_id();

2. 唯一键UNIQUE KEY

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,不同的是:
唯一键允许为空,而且可以多个为空(主键是不能为空的!)
空字段不做唯一性比较。

下面通过实操观察学习:

  1. 不能出现重复的值:在这里插入图片描述

  2. 能为NULL空
    在这里插入图片描述

关于唯一键和主键的区别:
我们可以简单理解成:

  • 主键更多的是标识唯一性的。
  • 而唯一键更多的是保证在业务上,不要和别的信息出现重复。

理解:
主键是不能为空且不能重复的:如正常公民的身份证
唯一键:它同样是不能重复但可以为空:如填表过程中,假如一个人没qq,而这个qq它本身是不能重复的,但是它是可以填写NULL空的。

主键和唯一键它们是相互互补的
因为主键在表中只能有一个,唯一键就补充了它的只能唯一的不足,为表中一些同样不能重复的字段能够被约束

其中在表结构中

  1. 主键:PRI
  2. 唯一键:UNI
    在这里插入图片描述
    附:虽然唯一键可以为空,但同时唯一键也是能设置为非空约束的
    在这里插入图片描述
    这样就不能插入空了!(就真类似于主键了)

其中注意

  • 一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整。
  • 具体指的是在业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯一键

3. 外键FOREIGN KEY

定义:

外键一般用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

语法(在定义完字段后添加):

foreign key (字段名) references 主表()

实操:

学校中:学生班级实例:

在这里插入图片描述

  1. 创建班级表:
    在这里插入图片描述
  2. 创建学生表:
    在这里插入图片描述

其中常识知道:一定是先有班级,才有学生的

  1. 插入班级(数据):
    在这里插入图片描述
  2. 插入学生(数据):
    在这里插入图片描述

而其中学生插入的班级id(class_id)它是不能出现问题的,也就是班级id,在班级表中是必须得存在的也就是必须先有班级才能有学生!
那么为了约束这个问题(先有班级再有学生),那么能将学生表中的class_id和班级表中的id建立外键联系。
外键的作用:
通过这个约束设置到学生的class_id上后,在插入学生信息时填写的class_id就必须和班级表中的id关联(也就是说不能插入没关联的,插入时若class_id在班级表中的id不存在时是无法插入的
假如你需要插入该班级,就必须先得创建该班级

这样就能重新创建学生表,对class_id字段添加外键约束
在这里插入图片描述
班级数据:
在这里插入图片描述
当插入时插入没有的班级idclass_id时就会报错(并没有class_id = 3):在这里插入图片描述

总结回来:

  1. 对于设置了外键约束的字段来说,它关联的外键值,必须是在关联表中是存在的/为null的
  2. 设置外键约束,能很好的保证某一些特别值(需要保证存在的值)不出现不存在的情况
  3. 设置外键还能让两个表有一定的关联性(主从表的关联关系)
  4. 其中关联的外键字段必须是关联表的主键/唯一键列

附:
结构中看见的CONSTRAINT:外键的名字,我们是可以给外键起名字,此处是直接为默认。
在这里插入图片描述


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量MySQL细致内容,早关注不迷路。

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

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

相关文章

观察者模式(sigslot in C++)

大家,我是东风,今天抽点时间整理一下我很久前关注的一个不错的库,可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计,sigslot 官网: http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…

内置函数.

日期函数 current_date/time() 日期/时间 获得年月日: 获得时分秒: 获得时间戳:日期时间 now()函数 体会date(datetime)的用法:只显示日期 在日期的基础上加日期:按照日历自动计算 关键字为 intervalinterval 后的数值…

web实验三

web实验三 三四个小时左右吧&#xff0c;做成功了学到新东西了&#xff0c;还是挺有趣的&#xff0c;好玩。还有些功能没做完&#xff0c;暂时这样了&#xff0c;要交了。 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF…

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…

windows平台小熊猫C++安装fmt库

前言 Windows安装C第三方库有点不容易&#xff0c;使用VS的可能还好点&#xff0c;有vcpkg工具用。使用其他工具的就麻烦了&#xff0c;因为基本上第三方库&#xff0c;都默认你是Linux平台&#xff0c;给的安装方式教程都是清一色Cmake&#xff0c;Windows上没有cmake&#x…

信号处理相关的东东(学习解惑)

信号处理相关的东东&#xff08;学习解惑&#xff09; 所有内容学习自知乎专栏&#xff0c;https://www.zhihu.com/column/xinhao&#xff0c;写的很好&#xff0c;值得反复学习 时频域分析的一些常用概念 FROM&#xff1a;https://zhuanlan.zhihu.com/p/35742606 1、相加性…

pset4filter less: helpers.c

&#xff08;&#xff14;&#xff09;blur function 简单画图熟悉一下要做什么 可以看到3种情况&#xff0c;顶格&#xff0c;边界&#xff0c;里面如果分开算的话&#xff0c;是真的麻烦&#xff1b;但是当时还真的没有想到更好的&#xff0c;就先写一写&#xff08;此处摘取…

3. Kafka入门—安装与基本命令

Kafka基础操作 一. 章节简介二. kafka简介三. Kafka安装1. 准备工作2. Zookeeper安装2.1 配置文件2.2 启动相关命令3. Kafka安装3.1 配置文件3.2 启动相关命令-------------------------------------------------------------------------------------------------------------…

某政银行APP登陆逆向

版本 V10.0.0 环境检测 {"xposed": {"action": "warn_and_exit","msg": {"zh_CN": "检测到您的设备安装有Xposed框架&#xff0c;存在非法攻击风险&#xff01;"},"button": {"zh_CN": &qu…

51c自动驾驶~合集42

我自己的原文哦~ https://blog.51cto.com/whaosoft/12888355 #DriveMM 六大数据集全部SOTA&#xff01;最新DriveMM&#xff1a;自动驾驶一体化多模态大模型&#xff08;美团&中山大学&#xff09; 近年来&#xff0c;视觉-语言数据和模型在自动驾驶领域引起了广泛关注…

算法题(12): 特殊年份

审题&#xff1a; 需要输出特殊年份的个数 思路&#xff1a; 获取数据&#xff1a;用字符串获取&#xff0c;然后全部加到总字符串s上判断 使用for循环对每一个四位数年分进行判断&#xff0c;如果是特殊年份就让负责记录的cou变量 解题&#xff1a; 注意&#xff1a;为什么我们…

RuoYi-Vue 数据权限控制示例nvliz (作业机器版)

目录 需求分析 ​编辑建表 代码编写 service层 Mapper层 测试 修改数据权限 添加数据 需求分析 建表 在若依的数据库中建立设备表&#xff1a;equipment 代码编写 使用代码生成&#xff0c;设备管理信息界面&#xff0c;如下图&#xff1a; 使用RuoYi的代码生成的功…

汽车IVI中控开发入门及进阶(三十八):手机投屏HiCar开发

手机投屏轻松实现手机与汽车的无缝连接,导航、音乐、通话等功能应有尽有,还支持更多第三方应用,让车载互联生活更加丰富多彩。 HiCar在兼容性和开放性上更具优势。 手机投屏可以说是车机的杀手级应用,大大拓宽了车机的可用性范围。其中华为推出的HiCar就是非常好用的一种。…

数据结构经典算法总复习(下卷)

第五章:树和二叉树 先序遍历二叉树的非递归算法。 void PreOrderTraverse(BiTree T, void (*Visit)(TElemType)) {//表示用于查找的函数的指针Stack S; BiTree p T;InitStack(S);//S模拟工作栈while (p || !StackEmpty(S)) {//S为空且下一个结点为空&#xff0c;意味着结束遍…

PID 控制算法理论背景:飞控领域的核心调控机制(1)

在飞控工程领域&#xff0c;PID 控制算法占据着极为关键的地位&#xff0c;是实现飞行器精确稳定控制的基石。PID 作为比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;、微分&#xff08;D&#xff09;的集成代表&#xff0c;构建起了控制系统的核心架构&#x…

插入排序与计数排序详解

在 C 编程中&#xff0c;排序算法是非常基础且重要的知识。今天我们就来深入探讨两种常见的排序算法&#xff1a;插入排序和计数排序&#xff0c;包括它们的代码实现、时间复杂度、空间复杂度、稳定性分析以及是否有优化提升的空间。 一、插入排序 插入排序&#xff08;Inser…

示波器--UNI-T 优利德 UT4102C 使用介绍

示波器--UNI-T 优利德 UT4102C 使用介绍 1 介绍图示特点 2 UTP04示波器探头&#xff08;100M带宽&#xff09;3 功能介绍4 示例RS232 电平信号测试 参考 1 介绍 图示 特点 2GS/s的实时采样率&#xff1a;设备能够以每秒2吉萨&#xff08;Giga Samples per second&#xff09;…

【Mybatis-Plus】连表查询 逻辑删除 多租户

文章目录 连表查询逻辑删除多租户 连表查询 引入 mybatis-plus-join-boot-starter 依赖 <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join-boot-starter</artifactId><version>1.5.1</version>…

【java面向对象编程】第七弹----Object类、类变量与类方法

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一、Object类 1.1equa…