sql数据库的相关概念与底层介绍

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: sql数据库的相关概念与底层介绍

本文中的数据库指的是磁盘数据库。如果有sql语言(CRUD,增删改查)的使用经验会更容易理解本文的知识点。

数据库与redis的区别

数据库:数据存储长期在磁盘中,小部分频繁需要的数据会被临时提取在内存中。

Redis:数据存储在内存中。

OLTP与OLAP

两种数据库事务处理方式。

OLTP:一般针对增、删、改事务。要求实时性高、稳定性强、确保数据及时更新成功;

OLAP:查询事务。一般用于做数据分析。

SQL

定义

SQL是一种编程语言,带有特殊目的,structured query language,结构化查询语言。

除了能在mysql数据库中使用,sql还有可能可以在其他关系型数据库中使用。

sql主要用于管理关系型数据库系统。

关系型数据库:通常使用表存储数据,例如mysql。‘

非关系型数据库:存储结构比较广泛,例如redis,使用的是键值对存储。

语句分类

D:data,L:language。

DQL:Q,query,数据查询语言;

DML:M,Manipulate,数据操作语言;

DDL:D,Define,数据定义语言,一般用于表创建。

DCL:C,control,数据控制语言,一般用于用户权限控制。

TCL,Transaction Control Language - 事务控制语言,commit:事务提交,rollback:事务回滚;

数据库术语

数据库:数据库是一些关联表的集合;数据库系统使用B+树来组织和存储数据。

数据表:表是数据的矩阵;

列:一列包含相同类型的数据;

行:或者称为记录是一组相关的数据;

主键:主键是唯一的;一个数据表只能包含一个主键;

外键:外键用来关联两个表,来保证参照完整性;MyISAM 存储引擎本身并不支持外键,只起到注释作用;而 innoDB 完整支持外键;

复合键:或称组合键;将多个列作为一个索引键;

索引:用于快速访问数据表的数据;索引是对表中的一列或者多列的值进行排序的一种结构;索引可以分为主键索引和非主键索引,B+树通常以索引列的值作为key。

MySQL体系结构

流程图

Mysql体系结构主要是从磁盘读取数据,或者往磁盘存储数据经历的流程。

最上层是mysql驱动,它允许应用程序与mysql数据库进行连接、发送查询、接收结果等操作。有不同的实现语言。

进入到mysql之后,第一层是server层,主要功能是计算,也就是对驱动发过来的sql语句进行词法句法分析。

第二层是引擎层,引擎层向server层提供一套统一接口。不同的存储引擎在读效率、写效率、事务支持(ACID特性)、锁定级别、索引结构、数据压缩和存储的有无与存储等方面存在差异。

第三层是文件系统,包括了数据文件和数据库日志。

MySQL 内部连接池

管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求

网络处理流程:主线程接收连接,接收连接交由连接池处理;

主要处理方式:IO多路复用 select + 阻塞的 io;主线程负责接收客户端连接,然后为每个客户端 fd 分配一个连接线程,负责处理该客户端的 sql 命令处理;

当多个线程同时操作同一条记录时,可能会引发数据一致性的问题,这被称为并发访问的冲突。需要用一些手段加以控制才能确保数据一致性。

管理服务和工具组件

系统管理和控制工具,例如备份恢复、MySQL 复制、集群(不常用)等;

SQL接口:将 SQL 语句解析生成相应对象;如:DML,DDL,存储过程,视 图,触发器等;

查询解析器:将 SQL 对象交由解析器验证和解析,并生成语法树;

查询优化器:SQL 语句执行前使用查询优化器进行优化;

缓冲组件: 用于提高性能的各种缓存机制,包括查询缓存、InnoDB缓冲池和MyISAM键缓存等。查询缓存被标记为已弃用,并在MySQL 8.0.20版本中完全移除。这是因为查询缓存在具有高并发和频繁更新的环境下存在一些性能问题。

面试常见问题:

数据的设计范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

范式一:确保每列保持原子性;数据库表中的所有字段都是不可分解的原子值。例如:某表中有一个地址字段,如果经常需要访问地址字段中 的城市属性,则需要将该字段拆分为多个字段,省份、城市、 详细地址等;

范式二:一般用于组合索引的表。确保表中的每列都和主键相关,而不能只与主键的某一部分相关。

例如:下图的表中前两列共同作为了组合索引。

按照范式二可以拆分如下:

范式三:确保每列都和主键直接相关,而不是间接相关;减少数据冗余;范式三和范式二是有交集的关系。以范式二的表为例子,可以拆分如下:

反范式:范式可以避免数据冗余,减少数据库的空间,减小维护数据完 整性的麻烦;但是采用数据库范式化设计,可能导致数据库业 务涉及的表变多,并且造成更多的联表查询,将导致整个系统 的性能降低;因此基于性能考虑,可能需要进行反范式设计。

CRUD流程

以后的文章中对引擎层部分做详细介绍,此处暂时了解即可。

DDL操作是无法回滚(比如truncate,drop),但是DML语言可以(比如delete)。

下图对应的引擎是innodb。

数据库视图

创建语法:CREATE VIEW <视图名><视图名> AS <select语句>

也就是把select语句查询到的结果当作一个视图。注意,这个视图只是指向了select到的数据,但是它本身并没有占用内存空间。

作用:

  1. 可复用,减少重复语句书写;类似程序中函数的作用;
  2. 重构利器.假如因为某种需求,需要将 user 拆成表 usera 和表 userb;如果应用程序使用 sql 语句:select * from user 那就会提示该表不存在;若此时创建视图 create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;则只需要更改数据库结构,而不需要更改应用程序;
  3. 逻辑更清晰,屏蔽查询细节,关注数据返回结果。
  4. 权限控制,通过视图只能查询表,不能修改表。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
51 10
|
12天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
74 6
|
1天前
|
SQL Oracle 关系型数据库
sql语句创建数据库
在创建数据库之前,请确保你有足够的权限,并且已经考虑了数据库的安全性和性能需求。此外,不同的DBMS可能有特定的最佳实践和配置要求,因此建议查阅相关DBMS的官方文档以获取更详细和准确的信息。
|
1天前
|
SQL 缓存 数据库
sql 数据库优化
SQL数据库优化是一个复杂且关键的过程,涉及多个层面的技术和策略。以下是一些主要的优化建议: 查询语句优化: 避免全表扫描:在查询时,尽量使用索引来减少全表扫描,提高查询速度。 使用合适的子查询方式:子查询可能降低查询效率,但可以通过优化子查询的结构或使用连接(JOIN)替代子查询来提高性能。 简化查询语句:避免不必要的复杂查询,尽量使SQL语句简单明了。 使用EXISTS替代IN:在查询数据是否存在时,使用EXISTS通常比IN更快。 索引优化: 建立合适的索引:对于经常查询的列,如主键和外键,应创建相应的索引。同时,考虑使用覆盖索引来进一步提高性能。 避免过多的索引:虽然索引可以提高查询
|
8天前
|
SQL 数据库
数据库SQL语言实战(二)
数据库SQL语言实战(二)
|
8天前
|
SQL 算法 数据库
数据库系统概念(第三周 第一二堂总结)
数据库系统概念(第三周 第一二堂总结)
|
8天前
|
SQL 关系型数据库 数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?
【4月更文挑战第12天】数据库优化涉及硬件升级、操作系统调整、服务器/引擎优化和SQL优化。SQL优化目标是减少磁盘IO和内存/CPU消耗。`EXPLAIN`命令用于检查SQL执行计划,关注`type`、`possible_keys`、`key`、`rows`和`filtered`字段。设计索引时考虑外键、频繁出现在`where`、`order by`和关联查询中的列,以及区分度高的列。大数据表改结构需谨慎,可能需要停机、低峰期变更或新建表。面试中应准备SQL优化案例,如覆盖索引、优化`order by`、`count`和索引提示。优化分页查询时避免大偏移量,可利用上一批的最大ID进行限制。
33 3
|
11天前
|
SQL 监控 数据库
数据库管理与电脑监控软件:SQL代码优化与实践
本文探讨了如何优化数据库管理和使用电脑监控软件以提升效率。通过SQL代码优化,如使用索引和调整查询语句,能有效提高数据库性能。同时,合理设计数据库结构,如数据表划分和规范化,也能增强管理效率。此外,利用Python脚本自动化收集系统性能数据,并实时提交至网站,可实现对电脑监控的实时性和有效性。这些方法能提升信息系统稳定性和可靠性,满足用户需求。
41 0
|
12天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改