【MySQL】表的约束
目录
一、非空约束not null
二、默认值约束default
三、列描述comment
四、填充零zerofill
五、主键primary key
六、自增长auto_increment
七、唯一键unique
八、外键foreign key
一、非空约束not null
如果不对一个字段做非空约束,则默认为空。但空数据无法参与运算,并且我们有时需要禁止用户在某些字段中输入空值,所以实际开发时我们常常需要对一些字段进行非空约束
像这样,在建表时不对字段进行非空约束,且插入时也没有指定数据,则默认为空
如果要禁止某些字段为空,就要像下面这样在数据类型后加上非空约束
输入desc 表名 查看表的结构:
NULL属性代表某列数据能否为空。可以看到,加入非空约束后,对应字段就不允许为空了,
二、默认值约束default
添加default约束实际上就是为某列数据设置默认值,当未指定列数据则采用该默认值
前面已经可以看到,如果不设置default约束,则字段默认值为NULL。default约束和非空约束并不冲突,如果用户插入的数据是NULL,就看是否有非空约束;如果对应列未插入数据,就看是否有default约束。
添加default约束的方式和非空约束一样:
查看表结构:
可以看到对应字段的Default属性已经被设置为我们指定的默认值了
三、列描述comment
我们在之前已经见过列描述了,其主要用于对一个字段作注释,相当于一个软性的约束
例如:
列描述用于提示用户对应字段的含义,可以通过 show create table 列名 来查看
四、填充零zerofill
zerofill可以在插入的数据小于设定的长度时在前面自动填充前导0
我们在设置数字类型时,可以在类型的后面加上一个长度,例如:
向表中插入一行数据:
可以看到,设置了zerofill属性的字段a,若数据长度小于我们前面设定的长度10,则会在前面添加前导0直到符合设定长度;如果数据位数比设置的长度更大则正常插入,无需添加
实际上在数据库内部存储的数据还是去除前导0后的原始数据,设置zerofill只能让数据格式化输出
五、主键primary key
主键(primary key)用于约束某个字段里面的数据不能重复且不能为空。例如当插入学号数据时,一般是不允许有重复的学号的,因此就可以将该列数据设置为主键
一张表里最多只能有一个主键,且设置为主键的列通常是整数类型。因此主键也用于标识某行数据的唯一性,例如通过学号标识一个学生的唯一性
将某个字段设置为主键的方式有多种,例如:
- 建表时直接指定主键
在查看表结构时,对应字段的Key属性如果为PRI则表明该字段是主键
- 在已创建的表中追加主键约束
alter table 表名 add primary key(列名);
- 用主键字段列表来创建主键
这种方式可以创建复合主键,例如:
此时id和age共同合成一个复合主键,此时只有这两列数据同时重复才会触发主键冲突,否则都是允许插入的
删除主键的方式:
alter table 表名 drop primary key;
可以看到主键约束已经被删除了
在插入数据时,插入重复的主键数据是不被允许的,例如:
如果一个表中已经存在了若干条数据,且某一列中存在重复数据,此时我们不能再对该列添加主键约束
六、自增长auto_increment
自增长属于主键的一种,当某个字段设置自增长时,即便我们在插入时不指定该字段的值,系统也会自动从当前字段已有的最大值进行+1操作得到一个自增长的值。自增长通常与主键搭配使用作为逻辑主键
任何一个字段要做自增长,前提是本身是一个索引,且必须是整数。一张表最多只能有一个自增长字段
例如:
随便插入几个数据,观察自增长字段的变化
我们也可以在插入时指定自增长字段的值,这样在下一次自增时则会以上一次插入的值为基准开始增长
在最初建表时,我们也可以指定自增的初始值
七、唯一键unique
一张表中往往有多个字段都需要保证数据的不重复,但主键只能有一个,因此唯一键就可以解决多个字段需要唯一性约束的问题。
唯一键与主键互补,主键用于标识单条数据在整个表中的唯一性,唯一键用于保证某个字段中数据在这一列的唯一性。例如我们将用户的姓名作为主键标识用户的唯一性,但用户的电话也是不应该重复的,因此我们可以将电话设置为唯一键
唯一键的本质与主键差不多,但唯一键允许数据为空,且不对空数据做唯一性比较(即唯一键可以有多个空数据)
例如:
随便插入几条数据:
可以看到唯一键不允许重复,但不会对null做检测
八、外键foreign key
外键用于定义主表与从表之间的关系。外键约束主要在创建从表时定义,并且与主表的主键约束或唯一键约束关联
例如我们有一个主表存放学校内所有班级的信息,从表存放学生的信息
- 先创建主表,将班级的编号设置为主键
- 再创建从表,将学生学号设置为主键,将学生所属的班级编号与主表中的班级编号进行外键约束关联
设置外键约束的语法:
foreign key (从表字段) references 主表名(主表字段)
我们先向主表中插入几个班级信息
再向从表中插入几个学生信息
可以看到,当学生所属的class_id在主表中的id字段中存在时,是可以正常插入的,但:
当class_id在主表中的id字段中不存在时禁止插入。事实上一个学生也不可能属于一个不存在的班级,因此是符合我们实际业务需要的
外键的数据需要在主表中所关联的对应列中存在,不能插入不存在的数据
但是如果class_id为null,是允许插入的
例如某个学生还没有分配班级,就设置为null
如果某个主键列对应的外键中还有数据,我们是无法直接删除对应的主键数据的,例如:
编号为1的班级中还存在学生的数据,我们就无法把这个班级的数据删除
实际中,很多数据都是存在相关性的。如果两张表在业务上具有相关性,但是没有建立约束关系,就可能导致出现问题,例如一个学生属于了一个不存在的班级。通过外键我们就可以将不同表的两个字段相关联,建立约束关系。
完.
相关文章:

【MySQL】表的约束
目录 一、非空约束not null 二、默认值约束default 三、列描述comment 四、填充零zerofill 五、主键primary key 六、自增长auto_increment 七、唯一键unique 八、外键foreign key 一、非空约束not null 如果不对一个字段做非空约束,则默认为空。但空数据无…...

c++高级篇(四) ——Linux下IO多路复用之epoll模型
IO多路复用 —— epoll 前言 在之前我们就已经介绍过了select和poll,在作为io多路复用的最后一个的epoll,我们来总结一下它们之间的区别: a select 实现原理 select 通过一个文件描述符集合(fd_set)来工作,该集合可以包含需要监控的文件…...

基于Java Springboot环境保护生活App且微信小程序
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...

.NET 9 中 LINQ 新增功能实现过程
本文介绍了.NET 9中LINQ新增功能,包括CountBy、AggregateBy和Index方法,并提供了相关代码示例和输出结果,感兴趣的朋友跟随我一起看看吧 LINQ 介绍 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的…...

【Vue3中Router使用】
Vue3中Router使用 1. 安装vue-router组件2. 建两个测试页面2.1 测试页面Home.vue2.2 测试页面Category.vue 3. 创建路由对象4. 在入口main.js中引入router把App.vue改成路由页面5. 测试5.1 关闭检查解决ESlint报错5.2 改文件名解决ESlint检查报错测试WebHashHistory 和WebHisto…...

性能测试攻略(一):需求分析
性能测试成为软件开发和运维过程中不可或缺的一环。性能测试不仅能够帮助我们了解系统在特定条件下的表现,还能帮助我们发现并解决潜在的性能问题。那么我们怎么做一次完整的性能测试呢?首先,我们需要进行需求分析,来明确我们的测…...

android WebRtc 无法推流以及拉流有视频无声音问题
最近在开发使用WebRtc进行视频通话和语音通话,我使用的设备是MTK的手机,期间后台的技术人员几乎没法提供任何帮助,只有接口和测试的web端,有遇到不能推流。推流成功网页端有画面有声音,但是安卓端有画面,没…...

Socket编程TCP
【Linux】TCP编程 实验:通过TCP通信—在客户端输入要执行的指令,接收执行结果,另服务端接收指令并执行,向客户端发送执行结果 //主函数 #include<iostream> #include<string> #include"log.hpp" #include…...

《以 C++为笔,绘就手势识别人机交互新画卷》
在科技浪潮汹涌澎湃的当下,人机交互领域正处于深刻变革的前沿阵地。从古老的命令行输入到图形化界面的鼠标点击,再到如今风靡全球的触摸操控,每一次交互方式的革新都重塑了我们与电子设备的沟通模式。而近年来,手势识别技术作为一…...

【CSS】小球旋转loading加载动画
效果 css小球旋转loading动画 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…...

Leetcode经典题6--买卖股票的最佳时机
买卖股票的最佳时机 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。…...

BA是什么?
目录 1.EKF的步骤 一、问题定义与模型建立 二、线性化处理 三、应用卡尔曼滤波 四、迭代与收敛 五、结果评估与优化 注意事项 2.BA问题的步骤 一、问题定义与数据准备 二、构建优化模型 三、选择优化算法 四、执行优化过程 五、结果评估与优化 六、应用与验证 1.…...

【IDEA】报错:Try to run Maven import with -U flag (force update snapshots)
问题 IDEA运行项目报错:Try to run Maven import with -U flag (force update snapshots) 原因 IDEA 的项目运行绑定的maven有问题, 解决问题 检查项目绑定的maven配置...

MATLAB提供的窗函数
加窗法 为什么使用加窗法? 在数字滤波器设计和频谱估计中,加窗函数的选择对于整体结果的质量有重大影响。加窗的主要作用是减弱因无穷级数截断而产生的吉布斯现象的影响。 windowDesigner 六种常见的窗函数 根据离散时间傅里叶变换的乘法性质&a…...

git 使用配置
新拿到机器想配置git 获取代码权限,需要的配置方法 1. git 配置用户名和邮箱 git config --global user.name xxxgit config --global user.email xxemail.com 2. 生成ssh key ssh-keygen -t rsa -C "xxemail.com" 3. 获取ssh key cat ~/.ssh/id_rsa.…...

【深度学习】深入解析长短期记忆网络(LSTMs)
长短期记忆网络(Long Short-Term Memory networks, LSTMs)是一种特殊的递归神经网络(RNN),专门设计用来解决标准 RNN 在处理长序列数据时的梯度消失和梯度爆炸问题。LSTMs 在许多序列数据任务中表现出色,如…...

vue watch和computed的区别,computed和method的区别
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 在 Vue 中,watch、computed 和 methods 都是常用的响应式功能,它们的用途和工作方式有所不同。下面分别解…...

搭建高可用负载均衡系统:Nginx 与云服务的最佳实践
搭建高可用负载均衡系统:Nginx 与云服务的最佳实践 引言 在项目开发过程中,我们通常在开发和测试阶段采用单机架构进行开发和测试。这是因为在这个阶段,系统的主要目的是功能实现和验证,单机架构足以满足开发人员的日常需求&…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg复用
封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...

Node.js JWT认证教程
Node.js JWT认证教程 1. 项目介绍 JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案,在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。 2. 项目准备 2.1 初始化项目 # 创建项目目录 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …...

nn.utils.clip_grad_value_
nn.utils.clip_grad_value_ 是 PyTorch 中的一个函数,用于在训练过程中对模型的梯度进行裁剪,以防止梯度爆炸(gradient explosion)问题。该函数对梯度的每个元素进行裁剪,将其限制在一个指定的最大绝对值范围内。裁剪后…...

Java后端面试模板(技术面)
1、自我介绍模板 面试官您好!我是来自----大学计算机学院的一名大三学生,我的名字叫—。 在大学期间,我主要自学了一些主流的Java技术栈,其中主要包括:Java主流的框架:Spring MVC Spring Boot Spring Clou…...

【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变
【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变 目录 文章目录 【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果(包含重要…...

Docker 安装和使用
#Docker 安装和使用 文章目录 1. 安装2. 干掉讨厌的 sudo3. 使用镜像源3.1. 使用 upstart 的系统3.2. 使用 systemd 的系统 4. 基本使用4.1. 容器操作4.2. 镜像操作 5. 网络模式说明5.1. bridge 模式5.2. host 模式5.3. container 模式5.4. none 模式 6. 查看 Docker run 启动参…...

nginx网站服务
nginx介绍: 1、高并发,轻量级的web服务软件 2、稳定性高,系统资源消耗率低 对http的高并发处理能力高,单台物理服务器可以支持30000-50000个并发。 一般来说在工作中,单台的并发一般在20000. nginx的功能介绍&…...

MATLAB 手写判断点在多边形内外的2种方法(87)
MATLAB 手写判断点在多边形内外-方法1(87) 一、算法介绍二、算法实现1.方法1(代码+测试)2.方法2(代码+测试)三、结果一、算法介绍 手动实现两种方法,判断点在多边形的内部还是外部, 具体实现和测试代码如下,使用前请自行验证。(代码复制粘贴即可使用) 二、算法实现…...

Android SurfaceFlinger layer层级
壁纸作为显示的最底层窗口它是怎么显示的 1. SurfaceFlinger layer层级 锁屏状态dump SurfaceFlinger ,adb shell dumpsys SurfaceFlinger Display 0 (active) HWC layers: -----------------------------------------------------------------------------------…...

零基础快速掌握——【c语言基础】数组的操作,冒泡排序,选择排序
1.数组 内存空间连续: 2.定义格式 数组的定义格式: 数组分为一维数组、二维数组、以及多维数组,不同类型的数组定义格式时不一样 2.1 一维数组的定义 数据类型 数组名 [数组长度]; 解释: 数据类型࿱…...

个人IP建设:简易指南
许多个体创业者面临的一个关键挑战是如何为其企业创造稳定的需求。 作为个体创业者,您无法使用营销团队,因此许多人通过推荐和他们的网络来产生需求。因此,扩大您的网络是发展您的业务和产生持续需求的最佳策略。 这就是个人IP和品牌发挥作…...

【Unity高级】如何获取着色器(Shader)的关键词
在动态设置Shader时,会需要通过EnableKeyword, DisableKeyword来完成。但一个Shader有哪些关键词呢?Unity的文档中并没有列出来,但我们可以通过遍历Shader的KeywordSpace来查看。 1. 代码如下 using UnityEngine;public class KeywordExamp…...

OSS文件上传
1、我们这个系统对接的阿里云OSS需要先对接小鹏OSS系统获取accessKeyId、accessKeySecret,这个可以忽略 aliyun:oss:endpoint: https://oss-cn-hangzhou.aliyuncs.combucketName: xp-xpd-experiencedomain: https://xp-xpd-experience.oss-cn-hangzhou.aliyuncs.co…...

时序预测算法TimeXer代码解析
在时序预测领域,如何有效地利用外部变量(exogenous variables)来提升内部变量(endogenous variables)的预测性能一直是一个挑战。 在上一篇文章中,我结合论文为大家解读了TimeXer框架,今天&…...

【无标题】建议用坚果云直接同步zotero,其他方法已经过时,容易出现bug
created: 2024-12-06T16:07:45 (UTC 08:00) tags: [] source: https://zotero-chinese.com/user-guide/sync author: 数据与文件的同步 | Zotero 中文社区 Excerpt Zotero 中文社区,Zotero 中文维护小组,Zotero 插件,Zotero 中文 CSL 样式 数…...

Hive 分桶表的创建与填充操作详解
Hive 分桶表的创建与填充操作详解 在 Hive 数据处理中,分桶表是一个极具实用价值的功能,它相较于非分桶表能够实现更高效的采样,并且后续还可能支持诸如 Map 端连接等节省时间的操作。不过,值得注意的是,在向表写入数…...

docker怎么commit tag push?
在 Docker 中,commit、tag 和 push 是用于创建和推送自定义镜像到仓库的三个不同步骤。以下是每个命令的详细说明和使用方法: ### 1. docker commit 当你对一个运行中的容器做了修改,并希望将这些修改保存为一个新的镜像时,可以使…...

全面替换VMware,南昌大学一卡通的硬核智慧
将一昼夜分为十二时辰 是古人的博大智慧 晨光熹微,门扉轻启,负笈而行 智慧校园的“十二时辰”启幕新章 一、数字南大:一卡通打卡校园十二时辰 时辰轮转,一时有一时的使命师生们是如何高效、便捷地度过每个时辰?一张充…...

SpringMVC ,ioc和aop
IOC和AOP IOC 控制反转,将应用程序的控制权交给spring容器管理,而不是应用程序本身 1.创建一个mapper,测试用, 就写个普通方法 public class UserMapper {public void addUser(){System.out.println("dao层新增");} …...

3GPP R18 LTM(L1/L2 Triggered Mobility)是什么鬼?(三) RACH-less LTM cell switch
这篇看下RACH-less LTM cell switch。 相比于RACH-based LTM,RACH-less LTM在进行LTM cell switch之前就要先知道target cell的TA信息,进而才能进行RACH-less过程,这里一般可以通过UE自行测量或者通过RA过程获取,而这里的RA一般是通过PDCCH order过程触发。根据38.300中的描…...

Ansys Maxwell:Qi 无线充电组件
Qi 无线充电采用感应充电技术,无需物理连接器或电缆,即可将电力从充电站传输到兼容设备。由 WPC 管理的 Qi 标准确保了不同无线充电产品之间的互操作性。以下是 Qi v1.3 标准的核心功能: Qi v1.3 标准的主要特点 身份验证:确保充…...
Neo4j 图数据库安装与操作指南(以mac为例)
目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew(可选) 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…...

基于MFC绘制门电路
MFC绘制门电路 1. 设计内容、方法与难点 本课题设计的内容包括了基本门电路中与门和非门的绘制、选中以及它们之间的连接。具体采用的方法是在OnDraw函数里面进行绘制,并设计元器件基类,派生出与门和非门,并组合了一个引脚类,在…...

Gitee上获取renren-fast-vue install并run dev错误处理
目的:获取一个手脚架、越简约越好、越干净越好、于是看上了renren-fast-vue… 前端:vue2 后端:jdk1.8 mysql 5.7 SpringBoot单体架构 一开始只是下载前后端项目到本地,一堆乱七八糟的错误,网上找的资料也参差不齐… …...

sdk项目的git 标记新tag的版本号
在 Git 中,tag 是用来标记某个特定的提交点(通常是发布版本或重要的里程碑)的工具。通过 git tag,你可以为版本号创建标记,帮助团队跟踪不同版本的代码。 如果你想创建一个新的版本号标签,可以按照以下步骤…...

学习日志022 -- python事件机制
作业: 1】思维导图 2】完成闹钟 main.py import sysfrom PySide6.QtCore import QTimerEvent, QTime,Qt from PySide6.QtGui import QMovie,QMouseEvent from PySide6.QtWidgets import QApplication, QWidget from Form import Ui_Formclass MyWidget(Ui_Form,Q…...

JAVA八股文-运行篇-创建项目运行(1)
前置环境搭建:jdk、maven、idea、linux环境 一、创建一个java项目 File->New->Project 二、填写基本信息 三、完成,写了一段代码 四、打包 五、本地运行,运行和debug二选一 六、上传至linux环境 七、linux环境下命令执行 7.1 指定Main方法类 …...

Vue Web开发(二)
1. 项目搭建 1.1. 首页架子搭建 使用Element ui中的Container布局容器,选择倒数第二个样式,将代码复制到Home.vue。 1.1.1.下载less (1)下载less样式 npm i less (2)下载less编辑解析器 npm i less…...

Midjourney Describe API 的对接和使用
Midjourney Describe API 的对接和使用 Midjourney Describe API 的主要功能是通过上传图片,获取对图片的描述。使用该 API,只需要传递图片文件地址,API 会返回图片的详细描述。无需繁琐的参数设置,即可获得高质量的图片描述。 …...

MySQL是怎么加锁的
1. 全局锁 1.1 什么是全局锁? 全局锁是一种一次性锁住整个数据库的锁定机制。一旦加上全局锁,整个数据库的所有表都会处于只读状态,这意味着所有修改操作(如INSERT、UPDATE、DELETE)都会被阻塞。 常用的SQL命令&…...

burp suite 5
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

硬件和自驾功能
1 硬件 指令集架构 (ISA): ARM v6, v7, v8:这些是 ARM 公司设计的不同版本的指令集架构 (ISA)。ARM v6 和 v7 属于 32 位架构,而 ARM v8 则引入了 64 位支持(即 ARMv8-A)和 32 位向后兼容模式。需要强调的是ÿ…...

司马平邦:马斯克说美国国际开发署是犯罪组织,它都犯了什么罪?
即使在本周,《纽约时报》和《卫报》等其他西方主流媒体仍然在竭力误导它们的读者们,让他们认为美国国际开发署(USAID)仅仅是一个美国的对外援助组织而已。但是,作为特朗普政府的效率部首席顾问的埃隆·马斯克则称,USAID是一个已经无法挽救的“犯罪组织…...

无量仙翁下大棋,图个什么?
有人问,《哪吒2》中,大反派无量仙翁布那么大一个局,下那么大一盘棋,干那么多伤天害理的坏事,到底图个什么?无量仙翁图的是“让玉虚再次伟大”的大业啊。三界众生开始“对账”了,一对账,大家就发现,其实各族之间没啥解不开的血海深…...

哪吒2:反抗才能活,投降只有死!
哪吒2可以说是今年春节档最“热闹”的电影了,电影院坐得满满当当,孩子们一片欢声笑语,当“无量仙翁”被揍得鼻青脸肿的时候,一个稚嫩的声音大喊“这灯塔不行啊,太菜了”。这两天不是有人问,为啥美国不给中国的顶级…...

假如某公从建国后就一直在掌舵
有人说一代伟人“不会搞经济建设,只会搞阶级斗争”;还有人恶毒地说伟人“建国有功,建设有错,文革有罪,过大于功”;《新东方红》中也有一句歌词“改革开放冰雪融”。虽然历史没有假如,但可以镜鉴,我们可以基于已经发…...

第三章 屡告 举报、举报、再举报……
2014年,是我跟倪光南老师工作八年中最忙的一年——除了完成他交办的日常工作外,我还要阅读大量联想的资料、准备写书——此外,帮他编辑、整理和撰写一些举报信,也是一个“额外”的工作内容。倪光南院士2008年在英特…...

特朗普2.0,一颗投进西方世界的重磅炸弹!
当地时间1月20日中午,当选总统特朗普和当选副总统万斯在美国国会大厦圆形大厅宣誓就职,“特朗普2.0版”本正式上线!特朗普第二任期的开始,就像一颗投进西方世界的重磅炸弹。他一直以来高喊的“美国优先”口号,已经明确无误地告诉全世…...