MySQL(3)

devtools/2025/2/4 16:54:27/

约束

  • 概述

  • 约束演示

  • 外键约束

概念:约束是作用在表中字段上的规则,用于限制存储在表中的数据

目的:保证数据库中数据的正确,有效性和完整性

  • not null 非空约束

  • unique 唯一约束

  • primary key 主键约束

    • 主键是一行数据的唯一标识,要求非空且唯一
  • default 默认约束

    • 默认约束,保存数据时,如果为指定该字段的值,则采用默认值
  • check 检查约束(8.0.16之后)

    • 保证字段值满足某一个条件
  • foreing key 外键约束

    • 用来让两张表的数据之间建立联系,保证数据的一致性和完整性

注意:约束是作用在表中字段上的,可以在创建表/修改表的时候添加约束

注:图形化界面可以直接手动添加表

外键约束

概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性

语法:

# 第一种在创建表的时候,添加外键
create table 表名(字段名 数据类型,....constraint 外键名 foreign key 外键字段名 references 主表(主表列名)
)# 第二种alter table 表名 add constraint 外键名 foreign key (外键字段名) references 主表(主表列名);

注:黄色钥匙代表主键,蓝色小钥匙代表外键

语法

# 删除外键alter table 表名 drop foreign 外键名;

外键删除更新行为

  • no action

    • 有外键,不允许删除
  • restrict

    • 有外键,不允许删除
  • cascade

    • 有外键,则也删除/更新 外键在子表中的记录
  • set null

    • 有外键,则将子表中的外键值改为null
  • set default

    • 父表更变时,子表设置为一个默认的值(Innodb不支持)

      语法

      alter table 表名 add constraint 外键名 foreign (外键字段) references 主表名(主表字段名) on update (上面的参数) on delete (上面的参数)

多表查询

  • 多表关系

  • 多表查询概述

  • 内连接

  • 外连接

  • 自连接

  • 子查询

  • 多表查询案例

多表关系

概述:项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系。

  • 一对多,多对一

  • 多对多

    • 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
  • 一对一

    • 多用于单表的拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率

    • 实现:在任意一方加入外键,关联另外一方的主键,并且外键为唯一的unique

多表查询概述

概述:指从多张表中查询数据

笛卡尔积:两个集合,集合A和集合B 的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)

select * from emp,dept where emp.dept_id = dept.id;

多表查询分类

  • 连接查询

    • 内连接:交集部分的数据

    • 外连接

      • 左外连接:左表的所有数据,以及两种表交集部分数据

      • 右外连接:右表的所有数据,以及两种表交集部分数据

    • 自连接:当前表与自身的连接查询,自连接必须使用表别名

  • 子查询

内连接

外连接

  • 左外连接:表1的所有数据,表1和表2交集部分的数据

    左外连接

    select 字段列表 from 表1 left [outer] join 表2 on 条件…;

注:右外连接和上述语法格式一样,左外会用的更多一些

个人理解:是将左表全部打印的基础上,将左表的扩展信息也打出来(这里可能部分左表没有)

自连接

select 字段列表 from 表A 别名A join 表A 别名B on 条件...;

个人理解:表中某一个栏目存储了与自身相关的信息,需要这个信息来查询进一步的信息

注:自连接可以用左连接来实现

联合查询 -union ,union all

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

select 字段列表 from 表A... union [all] select 字段列表 from 表B....;

注:all删除后,会对合并后的结果进行去重

注:多张表的列数必须保持一致,字段类型也需要保持一致

子查询

概念:SQL语句中嵌套select语句,称为嵌套查询,又称子查询

分类:

  • 标量子查询(子查询结果为单个值)

  • 列子查询(子查询结果为一列)

  • 行子查询(子查询结果为一行)

  • 表子查询(子查询结果为多行多列)

根据子查询位置,分为: Where之后,from 之后,select 之后

标量子查询

子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式。

常见的操作符:= > < >= <=

注:内层的查询需要带小括号

列子查询

常用操作符:in,not in, any , some ,all

  • in :在指定的集合范围之内,多选一

  • not in:不再指定的集合范围之内

  • any :子查询返回列表中,有任意一个满足即可

  • some:与any等同,使用some的地方都可以使用any

  • all:子查询返回列表的所有值都必须满足

行子查询

常用的操作符:=,<,>,in,not in


http://www.ppmy.cn/devtools/156056.html

相关文章

使用 Docker + Nginx + Certbot 实现自动化管理 SSL 证书

使用 Docker Nginx Certbot 实现自动化管理 SSL 证书 在互联网安全环境日益重要的今天&#xff0c;为站点或应用部署 HTTPS 已经成为一种常态。然而&#xff0c;手动申请并续期证书既繁琐又容易出错。本文将以 Nginx Certbot 为示例&#xff0c;基于 Docker 容器来搭建一个…

2025_2_3 C语言中关于枚举类型,动态内存分配

1.枚举类型 枚举类型是用来表示一些离散值的 枚举常量默认从0开始&#xff0c;依次递增1 typedef enum{s1,s2,s3,s4 }num;以上&#xff1a;s10,s2 1, s3 2, s4 3 可以为枚举常量显式指定值 typedef enum{s1 1,s2 2,s3 3,s4 4 }num;枚举常量的调用有两种方法 直接使用…

15 刚体变换模块(rigid.rs)

rigid.rs是一个表示三维刚体变换&#xff08;Rigid Transformation&#xff09;的结构体定义&#xff0c;用于在计算机图形学、机器人学以及物理模拟等领域中表示物体在三维空间中的旋转和平移。在这个定义中&#xff0c;所有长度在变换后都保持不变&#xff0c;这是刚体变换的…

Qt文件操作

目录 一、文件操作相关类 1.QFile 2.QFileInfo 3.QTextStream 4.QDataStream 5.QDir 6.QFileSystemWatcher 7.QTemporaryFile 二、文件操作示例 1.文本文件操作 2.目录操作 3.二进制文件操作 一、文件操作相关类 1.QFile QFile类用于文件的创建、读写、复制、删除…

Python面试宝典13 | Python 变量作用域,从入门到精通

今天&#xff0c;我们来深入探讨一下 Python 中一个非常重要的概念——变量作用域。理解变量作用域对于编写清晰、可维护、无 bug 的代码至关重要。 什么是变量作用域&#xff1f; 简单来说&#xff0c;变量作用域就是指一个变量在程序中可以被访问的范围。Python 中有四种作…

基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 &#xff08;1&#xff09;系统首页 &#xff…

JVM-运行时数据区

JVM的组成 运行时数据区-总览 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。 《Java虚拟机规范》中规定了每一部分的作用 运行时数据区-应用场景 Java的内存分成哪几部分&#xff1f; Java内存中哪些部分会内存溢出&#xff1f; JDK7 和J…

如何解决云台重力补偿?

如何解决云台重力补偿? 最近在调试步兵云台的时候,由于枪管、图传、摄像头等重力的原因,pitch轴的参数尤其难以调整,又不想抬升和降低使用两套不同的参数,所以使用了重力补偿,效果也是比较理想的,于是整理为一篇文章记录一下 一、问题根源:枪管重力在“搞事情” 想象…