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. 权限控制,通过视图只能查询表,不能修改表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

np.argsort排序问题(关于位次)-含GitHub上在numpy项目下提问的回复-总结可行方案

np.argsort 与获取位相关问题 位次: 数组中的数据在其排序之后的另一个数组中的位置 [1,0,2,3] 中 0的位次是1 1的位次是2 2的位次是3 3的位次是4 这里先直接给出结论&#xff0c;np.argsort()返回的索引排序与实际位次在确实在某些情况下会出现一致&#xff0c;但后来numpy的开…

用pandas实现用前一行的excel的值填充后一行

今天接到一份数据需要分析&#xff0c;数据在一个excel文件里&#xff0c;内容大概形式如下&#xff1a; 后面空的格子里的值就是默认是前面的非空的值&#xff0c;由于数据分析的需要需要对重复的数据进行去重&#xff0c;去重就需要把控的cell的值补上&#xff0c;然后根据几…

HCIP网络的类型

一.网络类型&#xff1a; 点到点 BMA&#xff1a;广播型多路访问 -- 在一个MA网络中同时存在广播&#xff08;泛洪&#xff09;机制 NBMA&#xff1a;非广播型多路访问 -- 在一个MA网络中&#xff0c;没有泛洪机制-----不怎么使用了 MA&#xff1a;多路访问 -- 在一个…

JavaEE 文件操作IO

文件操作&IO 文章目录 文件操作&IO1. 认识文件2. 文件操作2.1 File 类2.2 文件读写2.2.1 FileInputStream2.2.2 FileOutputStream2.2.3 FileReader2.2.4 FileWriter2.2.5 Scanner读取文件 3. 案例练习3.1 案例一3.2 案例二3.3 案例三 在进行文件操作之前&#xff0c;我…

数据操作——缺失值处理

缺失值处理 缺失值的处理思路 如果想探究如何处理无效值, 首先要知道无效值从哪来, 从而分析可能产生的无效值有哪些类型, 在分别去看如何处理无效值 什么是缺失值 一个值本身的含义是这个值不存在则称之为缺失值, 也就是说这个值本身代表着缺失, 或者这个值本身无意义, 比如…

GPT应用程序的开发注意事项

GPT应用程序的开发语言可以选择多种语言&#xff0c;主要取决于您的偏好、团队的技能以及应用程序的具体需求。以下是一些常见的用于GPT应用程序开发的编程语言&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交…

项目管理流程

优质博文 IT-BLOG-CN 一、简介 项目是为提供某项独特产品【独特指:创造出与以往不同或者多个方面与以往有所区别产品或服务&#xff0c;所以日复一日重复的工作就不属于项目】、服务或成果所做的临时性【临时性指:项目有明确的开始时间和明确的结束时间&#xff0c;不会无限期…

【Web前端开发基础】CSS的盒子模型

CSS的盒子模型 一、学习目标 能够认识不同选择器的优先级公式能够进行CSS权重叠加计算&#xff0c;分析并解决CSS 冲突问题能够认识盒子模型的组成部分能够掌握盒子模型的边框、内边距、外边距的作用及简写形式能够计算盒子的实际大小能够了解外边距折叠现象&#xff0c;并知…

Linux用户空间和内核空间所有15种内存分配方法

在Linux操作系统中&#xff0c;内存管理是一个关键的系统功能。用户空间和内核空间分别使用不同的函数来申请内存。以下是用户空间和内核空间内存申请函数的详细列表&#xff1a; Linux用户空间内存申请函数 1. malloc() 函数&#xff1a; void* malloc(size_t size); 用于…

在IDEA中使用快捷键让XML注释更加规范

Setting -> Editor -> Code Style -> XML 取消勾选 Line comment at first column 这样我们在使用ctrl / 快速注释时&#xff0c;就可以让注释符号紧贴注释内容&#xff0c;不出现空格。

如何唯一标识一个进程

如何唯一标识一个进程 进程ID (PID)&#xff1a; 每个运行中的进程都有一个全局唯一的整数标识符&#xff0c;称为进程ID&#xff08;Process ID&#xff09;。PID由内核分配&#xff0c;并在整个系统范围内保持唯一。 在shell中输入echo $$来查看当前shell的进程ID&#xf…

ip_vs 的管理以及 keepalived + lvs 案例

ip_vs 的管理 ipvsadm 与 keepalived for lvs ipvsadm 命令及参数介绍 部署和配置LVS服务会经常用到一些命令&#xff0c;如ipvsadm&#xff0c;可以使用“ipvsadm -help”命令查看使用帮助。 ipvsadm 命令的常用参数及其说明如下&#xff1a; # 添加虚拟服务器# 语法&#x…

PLC从HTTP服务端获取JSON文件,解析数据到寄存器

智能网关IGT-DSER集成了多种PLC协议&#xff0c;方便实现各种PLC与HTTP服务端之间通讯。通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址&#xff0c;配置URL&#xff0c;即可采用POST命令&#xff0c;将JSON文件提交给HTTP的服务端&#xff1b; 服务端有返回的JSON&…

【JavaEE】认识网络的工作原理

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

66 C++对象模型探索。C++编译器在什么时候给我们创建默认的构造函数?

一 前提&#xff0c;关于C编译器给我们生成 默认构造函数 的错误认知 传统知识认为&#xff1a;如果在一个类中&#xff0c;我们没有定义任何的构造函数&#xff0c;那么编译器会为我们隐式自动定义一个默认的构造函数&#xff0c;我们称这种构造函数为 "合成的默认构造函…

德思特方案|EMI兼容测试方案——匹配不同测试标准,准确高效!

方案背景 近场测试非常适合产品开发阶段辐射发射的EMI预兼容测试。在EMC测试中&#xff0c;进行辐射发射测试时&#xff0c;通常天线离被测物EUT很远&#xff0c;进行的都是远场测量。标准的远场辐射发射测试&#xff0c;可以准确定量的告诉我们被测件是否符合相应的EMC/EMI标…

SpringCloudConfig+SpringCloudBus+Actuator+Git实现Eureka关键配置属性热更新(全程不重启服务)

文章目录 前言1.痛点2.解决方案3.具体实现3.1搭建热配置服务3.2编写配置文件3.3搭建版本控制仓库3.4Eureka-Client引入以下依赖3.5Eureka-Client微服务编写以下配置bootstrap.yml提前加载3.6分别编写测试Controller3.7测试效果3.8下线场景压测 4.SpringCloudBus优化 前言 在上…

imgaug库图像增强指南(32):塑造【雪景】效果的视觉魔法

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

Django(九)

1. 用户登录-Cookie和Session 什么是cookie和session&#xff1f; 发送HTTP请求或者HTTPS请求(无状态&短连接) http://127.0.0.1:8000/admin/list/ https://127.0.0.1:8000/admin/list/http无状态短连接&#xff1a;一次请求响应之后断开连接&#xff0c;再发请求重新连…

PCB导线阻抗概念

1. 计算公式 https://baijiahao.baidu.com/s?id1750340479004609055&wfrspider&forpc Z087/SQRT(εr1.41)ln[(5.98h)/(0.8wt)] 常规来说阻抗与介电常数成反比,与介质层厚度成正比,与线宽成反比,与铜厚成反比。 Z0&#xff1a;印刷导线的特性阻抗 εr&#xff1a;绝缘…