当前位置:网站首页>MySQL数据库的简介及select语句的执行流程
MySQL数据库的简介及select语句的执行流程
2022-08-08 15:53:00 【#0000FF格子衫】
1,mysql数据库:
mysql数据库作为一款Ocral公司旗下的数据库产品,是一款开源的关系型数据库管理系统,由瑞典的MySQL AB公司开发。SQL(Structured Query Language, 结构化查询语言) 是用来操作关系型数据库的语言,使用SQL可以对数据库和表进行添加,删除,修改和查询等操作。
优点 : (1)性能卓越服务稳定,很少异常宕机
(2)开放源代码无版权限制,自主性强,使用成本低
(3)社区比较活跃,问题可以比较快在社区解决
(4)支持多种操作系统,提供多种API接口,基本上可以兼容市面上大部分的编程语言。
缺点:
(1) 安全系统,复杂而非标准,只有调用mysqladmin来重读用户权限才会发生改变。
(2)MySQL不允许调试储存过程,开发和维护存储比较困难。
(3)MySQL不支持热备份
2,MySQL数据库的内部基础结构:
MySQL由连接层,SQL接口,解析层,优化器,缓存,存储引擎等组成,大致分成三层:MySQL Server层,存储引擎层和文件系统层。而MySQL Server层又包括连接层和SQL层。
(1)连接层
应用程序通过接口(例如Java中的ODBC , JDBC)来连接MySQL,最先处理的就是连接层。连接层包括通信协议,线程处理,用户密码认证三部分。
(2)SQL层
是MySQL的核心,主要包括权限判断,查询缓存,解析器,预处理,查询优化器,缓存和执行计划。
(3)存储核引擎层
Pluggable Starage Enginess属于储存核心层。MySQL独有的,主要负责MySQL中数据的储存和提取。
(4)文件系统层
文件储存层主要是将数据库中的数据存储在操作系统的文件系统上,并完成与储存引擎的交互。
3.数据库部分专业术语:
DBMS: 数据库管理系统,是位于操作系统与用户之间的一种操作和管理数据库的软件,关系型数据库通过RDBMS进行管理。
DateBase:数据库,是一个用来储存和管理数据的仓库。它的存储空间很大,并且有一定的存储规则。通过由行和列组成的二维表来管理数据。
Management:管理系统,是一个软件,我们可以通过它来进行数据的插入(insert),查询(query),修改(modify),删除(delete)表中的数据。
4.数据库设计之E—R图
E-R图是设计数据库的工具之一,用于构建数据库的概念模型。实体,属性和关系是设计数据库的基本要素。
(1)实体:实体是指现实世界中客观存在并可以相互区分的对象或实物。
(2)属性: 就是实体的特征。
(3)关系:两个实体或更多实体之间的对应关系。分为一对一,一对多,多对一,多对多。
5.数据库设计的三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,即满足不同的范式。
一共有六大范式,我们四,五,六在实际开发中,、很少用,所以我们主要了解一下前三大范式。
(1)第一范式
第一范式(1NF):用来确保每列的原子性,要求每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元)。
(2)第二范式
第二范式(2NF):在第一范式的基础上更进一层,要求表中的每列都和主键相关,即要求实体的唯一性。如果一个表满足第一范式,并且除了主键以外的其他列全部都依赖于该主键,那么该表满足第二范式。
(3) 第三范式
第三范式(3NF):在第二范式的基础上更进一层,第三范式是确保每列都和主键列直接相关,而不是间接相关,即限制列的冗余性。如果一个关系满足第二范式,并且除了主键以外的其他列都依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式。
6.select语句的执行流程
(1)select语句的完整语法:
SELECT
DISTINCT<select_list>
FROM<left_table>
<join_type> JOIN <right_table>
ON <join_condition>
WHERE <where_condition>
GRUOP BY <group_by_list>
HAVING <having_conidtion>
ORDER BY <order_by_condition>
LIMIT <limit_number>
-- 其执行顺序如下:
FROM
<表名> # 笛卡尔积
ON
<筛选条件> # 对笛卡尔积的虚表进行筛选
JOIN <JOIN,LEFT JOIN,RIGHT JOIN...>
<JOIN表> # 指定JOIN,用于添加数据到ON之后的虚表中,例如LEFT JOIN会将左表的剩余数据添加到虚表中
WHERE
<WHERE条件> # 对上述虚表进行筛选
GROUP BY
<分组条件> # 分组
<SUM()等聚合函数> # 用于HAVING子句进行判断,在书写上这类聚合函数是写在HAVING判断里面的
HAVING
<分组筛选> # 对分组后的结果进行聚合筛选
SELECT
<返回数据列表> # 返回的单列必须在GROUP BY子句中,聚合函数除外
DISTINCT
# 数据除重
ORDER BY
<排序条件> # 排序
LIMIT
<行数限制>
(2)需要注意的几点:
- GROUP BY 条件中,每个列必须是有效列,不能是聚合函数。
- NULL 值也会作为一个分组返回。
- 除了聚合函数,SELECT 子句中的列必须在 GROUP BY 条件中。
边栏推荐
猜你喜欢
18、学习MySQL ALTER命令
Streamsets Data Collector 3.12
瑞吉外卖学习笔记2
10分钟快速入门RDS【华为云至简致远】
api的封装
【Unity入门计划】Unity实例-C#如何通过封装实现对数据成员的保护
一文读懂字节跳动“埋点验证平台”
First online!Messaging middleware fairy notes, covering the essence of Alibaba's ten years of technology
vs2只运行项目中的一个文件
The origin and creation of Smobiler's complex controls
随机推荐
投资一个约20台桩的充电站需要多少钱?多久可以实现盈利?
跟我一起来学弹性云服务器ECS【华为云至简致远】
返回分页查询分类并统计多对多关系表中各分类下的应用数量
api的封装
A16z:为什么 NFT 创作者要选择 cc0?
从洞察到决策,一文解读标签画像体系建设方法论丨DTVision分析洞察篇
Mysql数据库入门学习笔记
web-sql注入
sqllabs 1~6通关详解
[Unity entry plan] Use the double blood bar method to control the blood loss speed of the damage area
在通达信开户安全不呢
Flutter的实现原理初探
一文读懂字节跳动“埋点验证平台”
C#/VB.NET 将PDF转为PDF/X-1a:2001
firewall高级配置
用于视觉语言导航的自监督三维语义表示学习
使用pymongo,将MongoDB生成的ObjectId类型数据与字符串之间的相互转化
领域驱动设计系列贫血模型和充血模型
Kubernetes-Basics-Common Commands
全网首发!消息中间件神仙笔记,涵盖阿里十年技术精髓