MySQL-表的约束

文章目录

  • 一、空属性
  • 二、默认值
  • 三、zerofill
  • 四、列描述
  • 五、主键
    • 删除主键
    • 追加主键
    • 复合主键
    • 根据主键快速索引
  • 六、自增长
    • last_insert_id()
  • 七、唯一键
  • 八、外键
    • class表(主表)
    • student表(从表)


一、空属性

在这里插入图片描述
之前我们将表的机构,使用desc table_name查看表的结构的时候,我们并没有说明Null这一栏代表的什么意思,现在我们就来详细讲解一下。

试想一种场景,我们要统计一个班上的人员信息,我们就需要创建一个表,这个表需要保存学生的姓名,学号,地址等信息。 以实际需求来讲,我们在插入表的时候,这里的姓名和学号是一定不能为空的,所以为了约束程序员在对表插入信息的行为,就可以使用添加是否允许一个字段的数据可以被设置为NULL。

那么怎么才能约束这种空属性的行为呢?

我们只需要在创建表的时候对字段添加上 not null 就可以约束该字段不允许为NULL。
在这里插入图片描述

在这里插入图片描述
可以看到,对设置的not null的字段强行设置为null时,数据库是会给我们报错的!

所以可以通过设置null空属性来对我们表插入的一种约束!

二、默认值

在这里插入图片描述
直接教用法:

在这里插入图片描述

然后插入数据
在这里插入图片描述
可以看到,我们设置的字段如果带有default默认值,在插入时如果忽略这个字段,会默认根据我们的设置的default默认值来填充这个字段。


三、zerofill

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。

mysql> show create table tt3\G
***************** 1. row *****************
Table: tt3
Create Table: CREATE TABLE tt3 (
a int(10) unsigned DEFAULT NULL,
b int(10) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

int(N)中的(N)如果没有携带zerofill就没有意义了,那么它的作用是什么呢?

  • 一旦添加了zerofill,该数字类型就会变成unsigned,所以也就不能再设置为负数。
  • 我们使用select查询表中的内容时,可以发现,如果你输入的数字少于N位,输出的时候就会用0来填补位数;如果你输入的位数大于N位,就不会有任何影响。

四、列描述

列描述–comment之前我们就已经接触过了。
在这里插入图片描述
comment更像是一种注释的行为,也算是一种约束。

五、主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键。 主键所在的列通常是整数类型。

例如下面我们要创建一个student表,要以学生的学号作为主键。

方法1在这里插入图片描述
方法2在这里插入图片描述

在插入的时候,作为主键的字段不允许插入重复的数据,否则会报错。在这里插入图片描述

删除主键

当创建好了一个表,并且创建表的时候就设置好了主键,如果又想删除这个字段的主键性质,应该怎么办?

在这里插入图片描述

追加主键

当有一个表,这个表没有主键,现在想让一个字段追加主键性质,应该怎么办?
在这里插入图片描述

复合主键

在这里插入图片描述
上面不是说 一张表中最多只能有一个主键吗? 为什么这里有两个主键?
这里的主键其实也只是一个,只不过这个表的主键添加到了两列上。

复合主键所带来的就是 在插入数据的时候,只要被设为主键的字段不同时存在相同的数据,就不会报错。
在这里插入图片描述
这里就是只要id和phone_num不同时都重复,插入就不会有问题,只有一个重复是没有关系的。

根据主键快速索引

在这里插入图片描述

六、自增长

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

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

在这里插入图片描述
在这里插入图片描述
我们再调用show create table student \G;
在这里插入图片描述
可以看到这里是有一个AUTO_INCREMENT=22来控制这种自增长的。

last_insert_id()

LAST_INSERT_ID() 是 MySQL 中的一个函数,它用于获取最近一次使用 AUTO_INCREMENT 字段的 INSERT 或 UPDATE 语句生成的 ID 值。这个函数非常有用,特别是在你插入数据到包含自增主键的表中,并希望立即获取这个新生成的主键值的时候。
在这里插入图片描述

七、唯一键

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

那么唯一键跟主键有什么区别呢?
主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。(其实也就是哲学意义不同)

在这里插入图片描述
对一个字段设置唯一键属性,可以用unique也可以用unique key。
我们还可以看到,primary key是默认带有not null属性的,unique key是不默认带有not null属性的。

在这里插入图片描述

八、外键

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

这里我们举一个例子就是主表为class,它有班级编号和班级名称;从表为student,它有学生的所属班级和学生的个人信息。 这里我们就可以让student表的所属班级与class表的班级编号相关联。

class表(主表)

在这里插入图片描述
在这里插入图片描述

student表(从表)

在这里插入图片描述
在这里插入图片描述
当从表student在向class_id插入1,2,3时都是非常顺利地插入进去的,但是当插入4的时候就报错了,这是因为我们的主表class只有1,2,3三个class_id,没有4这个班级编号,所以当从表student在插入4时才会报错,这就说明了这两个表已经建立了约束关系。

那如果我的主表想删除一行怎么办?
在这里插入图片描述
可以看到,如果我们想要删除主表中class_id=1的一行数据,数据库是不让我删的,这是因为我们的从表student也已经有对应的外键class_id=1,如果想要主表删除class_id=1这一数据行,首先就要删除所有从表外键class_id=1的数据行。

在这里插入图片描述
这也说明 主表和从表因为外键是互相约束的。


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

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

相关文章

文心一言:如何备考软考架构师

提问:软考高级:架构师指导,有哪些考点、重点考点有哪些?需要如何备考?案例分析题如何做?论文如何写? 文心一言回答1700字如下: 针对软考高级架构师的考试,以下是对考点、重点考点、备…

DiffusionModel-Transformer知识回顾

论文链接: Attention Is All You Need CNN vs RNN vs Transformer CNN(卷积神经网络) 特点: 局部连接:每个卷积神经元只与输入数据的局部区域连接,这有助于捕捉局部特征。权重共享:卷积核的权重…

运行在Linux上的程序越来越慢的排查思路

1、通过free -h 排查内存使用情况,是否内存满了 2、通过df -h 排查磁盘的使用情况,磁盘是否没有空间了 3、检查系统资源配置情况,比如使用ulimit -a检查当前会话的资源限制,如最大文件数、打开文件描述符数等,看是否…

清华计算几何-ConvexHull(凸包)-求极点InTriangle/ToLeft Test

ConvexHull(凸包) 凸包是什么 凸包是计算几何一个非常基础核心的概念。我理解的凸包就是给定一个点集合, 最外围的点的包围体就是凸包。如下所示: 极点(ExtremityPoint) 给定的点集合中, 如果一个点存在一条直线, 让其他所有点都在于该直线的同一侧, 则该点为极点。 非极点 …

JavaScript进阶(7) ----构造函数和原型对象

目录 构造函数 prototype 定义: 使用场景: constructor 使用场景: 原型proto 原型链 定义 特点 instanceof 运算符 原型继承的基本概念 在JavaScript中,构造函数和原型是面向对象编程的核心概念,它们共同构…

海康工业相机驱动

1.新建基于对话框的MFC程序,界面布局如下 2.修改控件ID,为控件绑定变量 3.创建全局变量,构造函数中初始化变量,初始化对话框界面,补齐各控件按钮响应函数 全文程序如下: // MFC_GrabimageDlg.h : 头文件 /…

【动态规划Ⅰ】斐波那契、爬楼梯、杨辉三角

动态规划—斐波那契系列 什么是动态规划斐波那契数组相关题目509. 斐波那契数 Easy1137. 第 N 个泰波那契数 Easy 杨辉三角118. 杨辉三角 Easy 爬楼梯相关题目70. 爬楼梯 Easy746. 使用最小花费爬楼梯 Easy 什么是动态规划 动态规划是一种通过将原问题分解为相对简单的子问题来…

近期几首小诗汇总-生活~卷

生活 为生活飘零,风雨都不阻 路见盲人艰,为她心点灯 贺中科大家长论坛成立十五周年 科学家园有喜贺 园外丑汉翘望中 曾一学子入我科 正育科二盼长大 憧憬也能入此家 与科学家论短长 园外翘首听高论 发现有隙入此坛 竟然也能注册成 入园浏览惶然立 此贴…

JAVA中的回溯算法解空间树,八皇后问题以及骑士游历问题超详解

1.回溯算法的概念 回溯算法顾名思义就是有回溯的算法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法&#xff…

[线性RNN系列] Mamba: S4史诗级升级

前言 iclr24终于可以在openreview上看预印本了 这篇(可能是颠覆之作)文风一眼c re组出品;效果实在太惊艳了,实验相当完善,忍不住写一篇解读分享分享。 TL;DR (overview) Structured State-Sp…

xshell公钥免密登录

设备:一台linux系统机器,一台windows系统机器 软件:xshell 要求:公钥免密登录 一、生成公钥、私钥 1、打开shell ; 点击工具 ; 新建用户生成密钥向导 2、生成密钥参数 密钥类型:RS…

element ui ts table重置排序

#日常# 今天带的实习生&#xff0c;在遇到开发过程中&#xff0c;遇到了element ui table 每次查询的时候都需要重置排序方式&#xff0c;而且多个排序是由前端排序。 <el-table :data"tableData" ref"restTable"> </<el-table> <script…

bi项目笔记

1.bi是什么 bi项目就是商业智能系统&#xff0c;也就是数据可视画、报表可视化系统&#xff0c;如下图的就是bi项目了 2.技术栈

Linux rsync文件同步工具

scp的不足 1. 性能问题 单线程传输 SCP只使用单线程进行传输&#xff0c;这意味着在传输大文件或大量小文件时&#xff0c;其传输速度和效率可能不如其他多线程工具。 无法压缩数据传输 SCP不支持内置的压缩机制&#xff0c;这在传输大文件时会导致带宽使用效率较低。 2.…

我花了5年时间训练自己这种能力,希望你也能成功

人生最重要的能力是日拱一卒&#xff0c;即每天做一点点对自己有利的事并持续足够长的时间。作者之前急于求成&#xff0c;减肥失败。同事通过每月改进一件小事成功减肥且知识储备丰富。作者受启发后&#xff0c;通过走楼梯、换代糖等小改变&#xff0c;用 4 年减了 40 斤&…

从头开始搭建一套Elasticsearch集群

前言 刚开始使用ES接触的就是rpm或者是云上提供的ES服务&#xff0c;基本上开箱即用。特别是云上的ES服务&#xff0c;开局就是集群版本&#xff0c;提供的是优化后的参数配置、开箱即匹配访问鉴权及常用插件&#xff0c;如无特殊需要基本上屏蔽了所有细节&#xff0c;直接可投…

深入了解 MySQL 的 EXPLAIN 命令

一、什么是 EXPLAIN 命令&#xff1f; EXPLAIN 命令用于显示 MySQL 如何执行某个 SQL 语句&#xff0c;尤其是 SELECT 语句。通过 EXPLAIN 命令&#xff0c;可以看到查询在实际执行前的执行计划&#xff0c;这对于优化查询性能至关重要。 二、EXPLAIN 的基本用法 要使用 EXP…

如何禁用键盘上的特定键或快捷方式?这里有详细步骤

要禁用特定的键盘键或快捷键吗&#xff1f;微软官方应用程序Microsoft PowerToys使这项任务变得非常简单。以下是使用Microsoft PowerToys中的键盘管理器禁用特定键或快捷方式的快速指南。 如果你还没有安装Microsoft PowerToys 如果你的设备上没有安装Microsoft PowerToys&a…

springboot上传图片

前端的name的值必须要和后端的MultipartFile 形参名一致 存储本地

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【匿名密钥证明(C/C++)】

匿名密钥证明(C/C) 在使用本功能时&#xff0c;需确保网络通畅。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 确定密钥别名keyAlias&#xff0c;密钥别名最大长度为64字节&#xff1b;初始化参数集&#xff1a;通过[OH_Huk…