MySQL数据库基础

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 把相同列的分为一组,如果不使用聚合函数的话,数据可能可以会产生不想要的结果。。。group by 可以搭配条件 :1. where 一般写在前面,先执行where,再执行group by,最后执行聚合。2. having 一般写在后面,先执行group by 再执行聚合,最后执行having。

目录


数据库约束


null


unique


default


primary key


外键约束


聚合查询


聚合函数


group by


联合查询


理解笛卡尔积


内连接


外连接


自连接


子查询


合并查询


目标:


1. 数据库约束


2. 聚合查询


3. 联合查询


数据库约束

对数据库中的数据来说,有的是合法的,有的是非法的,我们为了使数据库中的数据为合法的进而引入了 “约束 ”。


约束类型 说明

null 值不能为空

unique 值不能重复

default 没有赋值时的默认值

primary key 使某列有位移标识

外键约束 使一个表与另一个表匹配完整

null

使插入的值不能为空,为空的话,就不能插入。


unique

不能插入原来已有的值


注意:


unique 约束会让后续插入数据 / 修改数据 的时候,都先进行一次 查询 操作。


default

没有赋值时的默认值(默认情况下为空)


primary key

1. 一个表中只能有一个primary key


2. 设置为priamry的列,具有唯一性,并且不能为空


3. 带有主键的表 / 列,每次插入也都进行查询(影响不大,通过索引查)


如何保证主键唯一 ???


mysql 提供了 " 自增主键" ,主键一般为 int / bigint 的类型,在插入数据的时候,不必手动指定主键值,由服务器自动分配(从 1 开始递增),当然也可以自己插入,但是插入的值必须比上一个值大(系统插入的时候会按照当前最大值进行分配)。


外键约束

foreign key (当前表中被约束的列) references class (根据这个列约束);


1. 使两个表存在关系


2. 子表中的数据在对应的父表的列中要存在


3. 想删除父表的的时候,先删除子表


3. 父表中必须有主键(primary kay)


聚合查询

聚合函数

表达式查询是针对 列 和 列 之间的进行运算的,聚合查询相当于 行 和 行 之间的查询。因此 sql 中提供了 聚合函数。


1. count(...) 查询出来结果集的行数(“...” 为 “ * ” 的时候null也能算入)


2. sum(...) 把这一列的行求和(自动把null排除)


3. avg(...) 求平均值


4.max(...) 求最大值 min(求最小值)


eg:


select count(*) from 表名;


select sum / avg / max (列名) from 表名;


group by

select 列名, 聚合函数 from 表名 group by 列名;


把相同列的分为一组,如果不使用聚合函数的话,数据可能可以会产生不想要的结果。。。


group by 可以搭配条件 :


1. where 一般写在前面,先执行where,再执行group by,最后执行聚合。


2. having 一般写在后面,先执行group by 再执行聚合,最后执行having。


联合查询

理解笛卡尔积

在sql中,笛卡尔积的应用用于两个表求笛卡尔积,求后成为一个表。


假如有两个表,表1(2行,2列),表2(3行,3列)


求完笛卡尔积是将第一个表中的行和第二个表中的每一行进行结合,最终形成一个 6 行,5 列的表

e8d99119aacf2a73bea55e51c18f0f2d_47ab853cd7084651823d24ac00ad7924.png



内连接

select 列名, 列名... from 表1, 表2 where 条件 gruop by 列;


select 列名, 列名... from 表1 (inner)join 表2 on 条件;


1. 先将两个表进行笛卡尔积


select * from 表1, 表2;


2. 加上连接条件,筛选出有效数据


select * from 表1, 表2 where ... ;


3. 针对列进行精简


select 列名, 列名... from 表1, 表2 where ... ;


4. 针对上述结果进行聚合查询


select 列名, 列名... from 表1, 表2 where ... gruop by 列;


外连接

左外连接:select 列名, 列名... from 表1 left join 表2 on 条件;


右外连接:select 列名, 列名... from 表1 right join 表2 on 条件;


左外连接:以左侧表为基准,保证左侧表的数据都存在,如果对应列右侧不存在,填为空


右外连接:以右侧表为基准,保证右侧表的数据都存在,如果对应列左侧不存在,填为空


自连接

select 列名, 列名... from 表1,表1 where 条件;


sql中一张表只能进行列和列的比较,但是同一个表进行笛卡尔积就能将行的关系转换为列的关系。


子查询

select ... from 表1 where 字段 = (select ... from ...);


select ... from 表1 where 字段1 in (select ... from ...);


select ... from 表1 where exists (select ... from ... where 条件);


select ... from 表1, (select ... from ...) as tmp where 条件;


合并查询

-- UNION:去除重复数据


select ... from ... where 条件 union select ... from ... where 条件


-- UNION ALL:不去重


select ... from ... where 条件 union all select ... from ... where 条件


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
14天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1305 5
|
13天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1334 87
|
3天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
185 82
2025年阿里云域名备案流程(新手图文详细流程)
|
7天前
|
前端开发
Promise的then方法返回的新Promise对象的状态为“失败(Rejected)”时,链式调用会如何执行?
Promise的then方法返回的新Promise对象的状态为“失败(Rejected)”时,链式调用会如何执行?
244 127