MySQL数据库基础:约束
💎我的主页:MySQL
💎1. 约束的概述
约束是作用于表中字段的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确性,有效性和完整性
💎2. 约束的分类
💎2.1 非空约束
非空约束限制了该字段不能为null,
-- 创建student表,约束条件:id不能为null
create table student
(id bigint not null,name varchar(50)
);
之后再去尝试插入id为空的数据时就会报错
💎2.2 唯一约束
-- 创建student表, 约束条件:id 唯一
create table student
(id bigint unique,name varchar(50)
);
同理,此时插入相同的id时也会报错
null可以重复插入
💎2.3 默认约束
默认约束规定了没有给列赋值时的默认值
-- id设置为唯一,设置默认约束条件
create table student
(id bigint unique,name varchar(50) default '张某'
);
如果已经手动指定了null的话,就按照手动指定的,用户指定的优先级高于默认的优先级
💎2.4 主键约束
主键约束(primary key)是非空(not null)和唯一(unique)的结合,主键约束的列既是非空的也是唯一的
-- 设置id为非空且唯一
create table student(id bigint not null unique ,name varchar(50) default '张某'
);
如果把键设置为非空且唯一,就会被设置为主键
-- 设置主键并指定自增类型
create table student(id bigint primary key auto_increment,name varchar(50) default '张某'
);
💎2.4.1 全列插入:
设置自增类型,表示在当前表的上一条记录的基本上加1
之后再进行添加数据,并且尝试向主键中添加一个null值
在上面的全列插入写入数据时,不具体指定主键列的值,用null代替,会自动生成id,虽然说,主键是非空且唯一的,但由于设置了自增类型,所以当添加为null时,数据库会根据自增原则,自动生成 id
💎2.4.2 指定列插入:
指定列插入时,也会自动生成 id ,作为数据行的主键
一个表中只能有一个主键,但一个主键可以包含多个列,称为复合主键
💎2.4.3 直接指定一个主键值的情况:
新增一个主键为8的数据也成功执行了,并且后面再新增一个null的数据按照8进行自增,生成了9
接着来指定一个小于之前主键的值,然后再新增一个主键为null的数据,可以发现,后面是按照当前表中最大的值进行递增的
insert into teacher(work_number, name)
values (2022, '张三'),(2023, '李四');insert into teacher
values (8, 2024, '王五');
insert into teacher
values (null, 2025, '赵六');
insert into teacher
values (4, 2026, '小明');
insert into teacher
values (null, 2027, '大明');select id, work_number, name
from teacher;
💎2.4.4 复合主键:
一个表中只能有一个主键,但一个主键可以包含多个列,称为复合主键
这样直接定义两个主键会报错
复合主键的定义方法:
-- 复合主键的定义
create table pre_text
(id bigint,name varchar(50),mail varchar(50),primary key (id, name)
);
既然这些列都是主键,那么在进行唯一判断的时候,只有复合主键中所有的列相同才能够被判定相同,例如下面的唯一判断是没有问题的
下面这个只有一个id列相同,name列不同,所以可以直接插入
💎2.5 外键约束
💎2.5.1 插入
外键约束语法:
外键约束用来将两张表的数据之间建立连接,从而保证数据的一致性和完整性
此时创建的两张表没有任何的主外键关系,所以说插入一条不存在的班级编号在学生表里也是可以添加成功的
这时设置class表的id 为主键,student表的 class_id为id的外键
create table class
(id bigint primary key auto_increment,name varchar(20)
);create table student
(id bigint primary key auto_increment,name varchar(20),class_id bigint,foreign key (class_id) references class (id)
);
desc student;
此时主外键关系已经关联完毕,再次尝试插入插入一条不存在的班级编号到学生表里
-- 初识话插入数据
insert into class
values (1, 'it01'),(2, 'it02'),(3, 'it03');
insert into student(id, name, class_id)
values (1, '张三', 1),(2, '李四', 2),(3, '张三', 1);-- 尝试插入不合法数据
insert into student(id, name, class_id)
values (1, '赵六', 8);
-- 插入合法的数据
insert into student(id,name,class_id)
values (4,'王五',2);
select * from student;
select * from class;
当插入class表中不存在的8时,就会报错
插入班级表中的id存在的值时,就可以正常插入
💎2.5.2 删除
子表中的数据的删除没有限制,但是删除主表中的数据时,需要考虑是否子表中还存在对主表的依赖,下面来演示一个例子:
-- 删除主表数据
delete from class where id = 3;
此时子表中有一条数据依然还依赖着主表,还是会报出主外键关系的错误
把这条数据删除就可以删除主表中的数据了
delete from student where id = 4;
delete from class where id = 3;
💎2.6 检查约束
check - 保证列中的值符合指定的条件
-- 检查约束
create table person(name varchar(20),gender varchar(1),check ( gender = '男'or gender = '女' )
);-- 符合
insert into person (name, gender) values('张三','男');
-- 不符合
insert into person (name, gender) values('张三','无');
符合check里的条件就可以插入,不符合就会报错
相关文章:

MySQL数据库基础:约束
💎我的主页:MySQL 💎1. 约束的概述 约束是作用于表中字段的规则,用于限制存储在表中的数据 目的:保证数据库中数据的正确性,有效性和完整性 💎2. 约束的分类 💎2.1 非空约束 非空…...
Java设计模式和AOP编程
Java 六大设计原则;Java 23种设计模式(在此介绍三种设计模式) Java设计模式 单例模式 应用场景:spring中bean的作用域用的就是单例模式 //基本的单例模式————懒汉式 public class student {//3.创建static修饰的成员变量p…...
【扒代码】data.py
数据增强函数 import torch from torchvision.transforms import functional as TVFdef tiling_augmentation(img, bboxes, density_map, resize, jitter, tile_size, hflip_p):# 定义一个辅助函数,用于根据给定的概率水平翻转张量def apply_hflip(tensor, apply)…...
【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 目录 1,关于 unity test 测试框架的介绍 2,测试框架关于源码的介绍 3,使用unity test测试C代码 4,常用断言举例 1,关于 unity test 测试框架的介绍 unity test 是 ThrowTheSwitch.org 的一个主要工程。它…...

那些你应该掌握的linux命令
一、路径授权 要给 a 用户 b 路径的所有操作权限,可以使用以下命令: sudo chown -R a:a /b sudo chmod -R 770 /b1.sudo chown -R a:a /b chown 命令用于更改文件或目录的所有者和所属组。-R 选项表示递归地应用于目录及其内部的所有文件和子目录。a:a 表示将所有…...

系统出现高CPU可能风险因素整理
文章目录 死循环无限递归序列化加解密正则表达式计算密集型任务大流量Full GC资源竞争/死锁I/O阻塞外部接口调用 死循环 死循环是最常见的原因之一。当代码中存在无穷循环(例如在多线程环境下的HashMap线程不安全问题或分页查询条件不明确导致的无限循环࿰…...
前端技术 -- 动画效果之GSAP作用与使用示例
GSAP(GreenSock Animation Platform)简介 GSAP 是一个高性能、跨平台的 JavaScript 动画库,广泛用于网页动画的制作。它提供了丰富的 API,使得开发者可以轻松创建复杂的动画效果,并且在不同浏览器和设备上都能获得一致…...

C口一拖二数据线:解锁数字生活的便捷新篇章LDR6020
添加图片注释,不超过 140 字(可选) 在科技日新月异的今天,我们的电子设备如同生活中的伴侣,无论是工作、学习还是娱乐,都离不开它们的陪伴。随着Type-C接口逐渐成为众多高端智能手机、平板电脑、笔记本电脑…...

CH07_数据绑定
第7章:数据绑定 本章目标 理解路由事件 掌握键盘输入事件 掌握鼠标输入事件 掌握多点触控输入事件 数据绑定概述 什么是数据绑定 将WPF中的至少一个带有依赖项属性的两个对象的两个属性进行绑定,使某一个依赖项属性可以更新和它绑定的属性的功…...

24.python基础(8.8)
python基础 1.搭建环境python3 1.查看是否有安装python [rootpython1 ~]# yum list installed |grep python 2.安装python3 [rootpython1 ~]#yum -y install python3 [rootpython1 ~]#python --version #查看版本信息 最新安装3.12,可以使用源码安装 开…...

【论文阅读】MobileNetV4 - Universal Models for the Mobile Ecosystem
文章目录 摘要一、介绍二、相关工作三、与硬件无关的帕累托效率四、通用倒置瓶颈五、移动MQA六、MNv4模型的设计6.1 为增强的体系结构改进NAS6.2 MNv4模型的优化 7. 结果7.1 ImageNet分类7.2 COCO目标检测 8. 强化蒸馏配方9. 结论 MobileNetV4 - 移动生态系统的通用模型 摘要 …...
大模型日报 2024-08-07
大模型日报 2024-08-07 大模型资讯 [Figure AI 把「终结者」造出来了] 简介:Figure 发布新一代人形机器人 Figure 02,具多种功能,能实时对话、自主执行任务,导航用 VLM,电池续航提升,机械手先进,…...
区块链ddos防护怎么做
区块链ddos防护怎么做?在区块链这一新兴技术的浪潮中,我们见证了无数创新应用的诞生与繁荣。然而,在这片充满机遇的蓝海中,也潜藏着不容忽视的暗流——分布式拒绝服务攻击(DDoS)。DDoS攻击,如同网络世界的…...

在Linux中认识pthread库
int *pnullptr; pnullptr; *pnullptr; 指针变量做右值也是变量拥有空间。去承装数据。 *p代表指针所指向的空间,及0号地址,及往虚拟地址的0号地址处写8个字节的数据,全部写为0. (此操作不允许) 进程和线程的关系如…...

LVS 负载均衡
目录 LVS 体系结构 LVS 相关概念术语 lvs 集群常见类型 实验一: LVS NAT模式 LVS NAT特性 实验二: LVS DR模式 LVS DR特性 LVS是Linux virtual server的缩写,是一个高性能的、开源的负载均衡器,它运行于Linux操作系统之上…...

在Excel中启用宏 (~ ̄▽ ̄)~
一、启用宏 打开任意Excel,点击屏幕左上角的文件选项,然后选择Excel选项窗口。在Excel选项窗口中,选择信任中心按钮;在信任中心设置窗口中,选择宏设置,启用所有宏(不推荐,潜在风险&a…...

连接投影仪/显示器只能扩展不能复制的解决方案
原文章:https://iknow.lenovo.com.cn/detail/121481 故障现象: 笔记本外接投影仪/显示器后,笔记本屏幕有显示,但投影仪却只有背景或没有显示; 原因分析: 此现象多发生在双显卡机型上,笔记本屏…...

数据库基础知识
数据库基础知识 主流的数据库连接MySQL理解mysql和mysqld和数据库简单对数据库操作MySQL构架SQL分类存储引擎总结 主流的数据库 SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。Oracle: 甲骨文产品,适合大型项目…...
java JVM 锁消除
Java虚拟机 (JVM) 中的锁消除 (Lock Elimination) 是一种编译时优化技术,用于减少或完全去除不必要的同步操作。锁消除可以显著提高程序的性能,尤其是在多线程环境中。下面详细介绍锁消除的工作原理和技术细节。 锁消除的目的 锁消除的目标是在编译阶段…...
基于 Java Supplier与Predicate 封装自动重试机制通用接口
核心逻辑就是把重试的业务与重试中断条件抽象出来函数化,内部重试业务具体化。 关键需要理解Java的函数式接口编程 Supplier 与 Predicate作用。 import lombok.Data; import lombok.extern.slf4j.Slf4j;import java.util.Random; import java.util.function.Predi…...
使用react进行用户管理系统
今天通了一遍使用react进行用户管理系统的文档,以及跟随步骤实现了一遍,我大概梳理一下实现思路。 首先我们构建基本用户管理应用,需要数据库存储个人资料,我们先去supabase注册然后创建自己的数据库然后设置密码,然后…...

R 语言科研绘图 --- 热力图-汇总
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
【Java笔记】Spring IoC DI
目录 Spring IoC & DI1. IoC1.1 Bean的存储1.1.1 类注解1.1.2 方法注解 Bean1.1.3 重命名1.1.4 Spring扫描路径 2. DI Spring IoC & DI Spring两个核心思想:IoC & AOP Spring相当于一个容器,IoC就是把对象存放在Spring容器中,让…...

iOS 集成网易云信IM
云信官方文档在这 看官方文档的时候,版本选择最新的V10。 1、CocoPods集成 pod NIMSDK_LITE 2、AppDelegate.m添加头文件 #import <NIMSDK/NIMSDK.h> 3、初始化 NIMSDKOption *mrnn_option [NIMSDKOption optionWithAppKey:"6f6568e354026d2d658a…...

【机器学习】支持向量机
文章目录 一、支持向量机简述1.概念2.基本概念3.算法介绍4.线性可分5.算法流程 二、实验1.代码介绍2.模型流程3.实验结果4.实验小结 一、支持向量机简述 1.概念 支持向量机(SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器,其…...

世冠科技亮相中汽中心科技周MBDE会议,共探汽车研发数字化转型新路径
近日,中汽中心2025年科技周MBDE前沿应用主题会议在天津成功举办。本次会议以“智汇津门共探MBDE前沿应用新征程”为主题,聚焦基于模型的数字工程(MBDE)方法论在汽车复杂系统研发中的创新实践与跨领域协同,旨在推动行业…...

JS和TS的区别
JavaScript 与 TypeScript 的主要区别和特性对比 1. 基础定义 JavaScript 是一种动态、弱类型的编程语言,广泛应用于前端开发以及通过 Node.js 扩展到后端开发。TypeScript 则是 JavaScript 的超集,它在 JavaScript 的基础上添加了静态类型系统和其他增…...

吴恩达MCP课程(3):mcp_chatbot
原课程代码是用Anthropic写的,下面代码是用OpenAI改写的,模型则用阿里巴巴的模型做测试 .env 文件为: OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OPENAI_API_BASEhttps://dashscope.aliyuncs.com/compatible-mode…...

【清晰教程】查看和修改Git配置情况
目录 查看安装版本 查看特定配置 查看全局配置 查看本地仓库配置 设置或修改配置 查看安装版本 打开命令行工具,通过version命令检查Git版本号。 git --version 如果显示出 Git 的版本号,说明 Git 已经成功安装。 查看特定配置 如果想要查看特定…...

鲲鹏Arm+麒麟V10 K8s 离线部署教程
针对鲲鹏 CPU 麒麟 V10 的离线环境,手把手教你从环境准备到应用上线,所有依赖包提前打包好,步骤写成傻瓜式操作指南。 一、环境规划# 准备至少两台机器。 架构OS作用Arm64任意,Mac 也可以下载离线包Arm64麒麟 V10单机部署 K8s…...