MySQL数据库约束你真的懂吗?
✏️✏️✏️今天给各位带来的是关于数据库约束方面的知识
清风的CSDN博客
😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!
动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!😛😛😛


目录
一、NULL约束
二、UNIQUE约束
三、DEFAULT约束
四、PRIMARY KEY约束
五、FOREIGN KEY约束
5.1 语法
5.2 案例代码
一、NULL约束
NOT NULL - 指示某列不能存储 NULL 值。
现在我们创建一个student表:
create table student(id int, name varchar(20));


可以看到,当我们没有进行约束的时候,id 和 name 都是可以为NULL的。
当前这个表没有任何的约束,所以在往表里插入NULL的时候也是可以的:
insert into student values (null, null);

那么,现在来修改一下这个student,给这个表加上NOT-NULL约束:
create table student (id int not null,name varchar(20));

那么现在就可以看到两个表的差别了,第二次创建的表,对于id这一列,是不允许为空的。
所以当我们在插入NULL的时候,有了NOT-NULL的约束,程序就不会正常运行了:
insert into student (null,null);

对于NULL约束,还是比较容易理解的。
二、UNIQUE约束
create table student(id int, name varchar(20));insert into student values (1,'张三'); 

此时我们创建studenet表时加入UNIQUE约束,并插入张三的记录:
create table student (id int unique, name varchar(20));
insert into student values (1,'张三');
加入UNIQUE约束后,可以看到,id这一列的key是UNI(UNIQUE)的缩写:

因此,加入UNIQUE 约束之后,后续进行插入/修改的时候,都会先进行查询,看当前这个被约束的列的值是否已经存在。约束虽然能够引入更多的检查操作,也会增加系统的开销。

三、DEFAULT约束
DEFAULT - 规定没有给列赋值时的默认值
进行指定列插入的时候,其他未被指定到的列就会被设成默认值。
在这里我们还是以上面的student为例,重新创建student表并不加任何约束:
create table student(id int, name varchar(20));

创建表的时候,我们并没有加任何默认值约束,可以看到student表中的默认值为NULL。
当我们对student表进行指定列插入:
insert into student (id) values (1);
insert into student (name) values ('张三');

这里可以看到,进行指定列插入的时候,没有被指定的列,默认就是为NULL。
此时我们给student表加上DEFAULT约束:
create table student (id int default 0,name varchar(20) default '无名氏');
这样一来,再次进行指定列插入的时候,没有被指定的列就会被设定为创建表时候给的默认值。
四、PRIMARY KEY约束
create table student (id int primary key,name varchar(20)); 需要注意一下,一张表里面只能有一个PEIMARY KEY约束。(非空&唯一)

通常创建表的时候都会指定一个主键。除了上面基础的使用之外,还有一种情况-联合主键,它也是只有一个主键,但是这个主键是由多个列联合构成的。这里不做赘述。
加入主键约束后,插入记录的时候,主键的列是不能为空的:

insert into student values (1,'张三');
insert into student values (1,'张三);
//再次插入和第一条同样的记录
insert into student values (1,'张三); 
再次插入和第一条同样的记录,程序就会报错,因为记录重复。
五、FOREIGN KEY约束
5.1 语法
foreign key (字段名) references 主表(列) 5.2 案例代码
创建班级表:
create table class (class_ID int, name varchar(20)); 创建学生表:
create table student (id int, name varchar(20),class_Id int); 班级是要包含学生的,比如说班级现在有这样几个插入的数据:
insert into class values (1,'210701班'),(2,'210702班'),(3,'210703班'); 
insert into student values (1,'张三',1),(2,'李四',2),(3,'王五',100); 
现在,王五这个同学,不在班级表中存在,因此,这是一个不太科学的数据。而引入外键约束,就是为了解决这个问题。也就是说,希望学生表中的class_ID 都在班级表中存在,此时就可以使用外键约束。
create table class (class_ID int primary key,name varchar(20));create table student (id int primary key, name varchar(20), class_ID int, foreign key (class_ID) references class(class_ID));
前面说到的约束,都是在定义表的时候,哪一列需要约束,就创建到哪一列的后面。而外键约束,则是写到最后。即把所有前面的列都定义好了之后,在最后通过FOREIGN KEY创建外键约束。
创建外键的时候,要指定三个信息:
- 本表哪个列
- 引用自哪个表(references)
- 引用自另外一个表的哪个列
此时就要求,本表(student)中这个列的数据必须要在引用的另外一个表的对应列中存在,这个情况下,也可以认为,班级表约束了学生表。把这种约束其他表的表,称为父表,而把学生表这种被约束的表,成为子表。
引入外键之后,就会在对应的父表中检查子表插入的值是否在父表中存在,不存在就报错。其实,外键约束是双向的,父表约束子表,子表也会约束父表。比如:要想删除父表的记录,必须先删除子表对应的数据,确保子表中没有数据引用父表的记录。
✨好啦,今天的分享就到这里!之后,我会给大家分享一些复杂查询,比如联合查询,聚合查询,子查询等。
🎉希望各位看官读完文章后,能够有所提升。
✨创作不易,还希望各位大佬支持一下!
👍点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论:你的意见是我进步的财富!

相关文章:
MySQL数据库约束你真的懂吗?
✏️✏️✏️今天给各位带来的是关于数据库约束方面的知识 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手,点点关…...
YOCTO 下载repo工具失败解决办法
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repocp repo ~/binchmod ax ~/bin/repo如果使用时报错, 切换ubuntu 到 python3 版本。gedit repo 修改repo默认链接地址:REPO_URL "https://gerrit.googlesource.com/git-repo"…...
github连接失败Host key verification failed.解决方案
问题描述 之前一直用的gitee协同协作,然后再最近一次云计算项目中团队使用的是github进行协作,但是按照常规步骤再GitHub上配置了ssh密钥后,却依然显示连接失败,无法推送和拉取代码,克隆仓库也是报错拒绝。具体报错信…...
【TIDB】TiDB认证考试PTCA 练习题 题库
目录 题目 答案 解析 题目 1.下列功能是由 TiKV 或 TiFlash 实现的为?( 选 2 项 ) A. 根据集群中 Region 的信息,发出调度指令 B. 对于 OLAP 和 OLTP 进行业务隔离 C. 将关系型数据转化为 KV 存储进行持久化 D. 将 KV 存储…...
PPP/INS紧组合算法
前言:在学习紧组合之前学会GNSS/INS松组合是很有必要的,i2NAV团队开源的KF_GINS项目可以作为GNSS/INS松组合学习模板,本文章主要对武汉大学i2NAV发布的PPP/INS紧组合学习资源进行算法层面的总结,链接: 武汉大学多源智…...
【shell】 1、bash语法超详细介绍
文章目录 修改前缀路径dirname set常用函数参数变量local 返回值正则打印第 n 行获取行号核对数据库各表数量jq查询检查日志 sshpassexpect数组xargs bash manual 修改前缀 参考 export PS1"bash> "路径 dirname strip last component from file name dir$(…...
华清远见嵌入式学习——网络编程——作业3
目录 作业要求:基于UDP的TFTP文件传输 代码 下载功能效果图编辑 上传功能效果图 思维导图 模拟面试题和答案(定期更新) 作业要求:基于UDP的TFTP文件传输 完成文件的上传和下载功能 代码 #include<myhead.h>//实现…...
前端学习--React(3)
一、Redux 集中状态管理工具,不需要react即可使用,每个store的数据都是独立于组件之外的 vue小链接:vuex/pinia 基本使用 Redux将数据修改流程分成三个概念,state、action和reducer state - 一个对象 存放我们管理的数据状态 a…...
rotation matrix reflection matrix
文章目录 1. rotation matrix1.1 结论 2. reflection matrix2.1 结论 1. rotation matrix 图像逆时针旋转 θ \theta θ的矩阵 Q r o t a t e [ cos θ − sin θ sin θ cos θ ] (1) Q_{rotate}\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\c…...
Python基础教程: sorted 函数
嗨喽,大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作, sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 从新排序列表。 👇 👇 👇 更多精彩机密、教程…...
Vue 重写push和replace方法,解决:Avoided redundant navigation to current location
当我们使用编程式路由导航跳转路径时,如果我们两次携带同样的参数进行跳转,会进行页面报错: 那产生这个问题的原因是什么呢? 我们接收并输出调用push方法返回的结果: 会发现这是一个Promise对象 我们都知道ÿ…...
43、vue导出pdf文件,并解决滚动条外内容无法获取的问题
使用插件html2canvas和jspdf插件 下载完两个插件后引入所需要的页面 import html2canvas from "html2canvas" import jsPDF from "jspdf"1、在导出之前将元素的高度或者宽度设置为滚动高度或者宽度,如: el.style.height el.scro…...
牛客 最小公配数 golang版实现
题目请参考: HJ108 求最小公倍数 题解: 在大的数的倍数里面去找最小的能整除另外一个数的数,就是最小公倍数,按照大的来找,循环次数能够降到很少,提升效率 golang实现: package mainimport ("fmt" )func main() {a : …...
用 HLS 实现 UART
用 HLS 实现 UART 介绍 UART 是一种旧的串行通信机制,但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手,可以被视为本科生的作业。在这里,我将通过这个例子来展示在 HLS 中实现它是多么容易和有趣。 因此,从概念上讲…...
华清远见嵌入式学习——网络编程——作业4
作业要求:①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…...
【OpenCV实现图像:制作酷炫的动画效果】
文章目录 概要生成背景图添加点动画添加文本显示小结 概要 首先,通过导入必要的库,包括NumPy用于数学运算和Matplotlib库用于数据可视化。随后,创建图形和轴,初始化点的位置,以及编写初始化函数和更新函数。 初始化函…...
CSS鼠标属性篇
属性名:cursor 功能:设置鼠标光标的样式 属性值: pointer:小手move:移动图标text:文字选择器crosshair:十字架wait:等待help:帮助 eg.html{ cursor: wait;}(此处使用css改…...
交直流一体化电源系统测试步骤详解
交直流一体化电源拥有高度适应性,可以用于不同的电力需求领域。但是为了确保其质量和性能,需要对交直流一体化电源进行各项测试以保证正常工作。本文纳米软件将介绍交直流一体化电源的测试方法,以及如何用交直流一体化电源测试系统进行测试。…...
多数据库使用django-apscheduler时,migrate后并不能生成django_apscheduler_djangojob表的问题
先说一下django-apscheduler定时器的使用过程: django-apscheduler基本使用 1.安装django-apscheduler代码如下(示例): pip install django-apscheduler 2.配置settings.py的INSTALLED_APPS代码如下(示例)…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
