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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《WebKit 技术内幕》之九(2): JavaScript引擎

2 V8引擎 2.1 基础 V8是一个开源项目&#xff0c;也是一个JavaScript引擎的实现。它最开始是由一些语言方面的专家设计出来的&#xff0c;后被Google收购&#xff0c;成为了JavaScript引擎和众多相关技术的引领者。其目的很简单&#xff0c;就是为了提高性能。因为在当时之前…

力扣hot100 环形链表 快慢指针 计步器

Problem: 141. 环形链表 文章目录 思路&#x1f496; 快慢指针法&#x1f496; 计步器法 思路 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f496; 快慢指针法 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) /*** Definition for singly-linked list…

DL专栏—笔记目录

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要是记录工作中、学习中关于AI(Deep Learning)相关知识并分享。 &#x1f60a;&#x1f60a;&#x1f…

C++ | 冒泡排序(指针数组函数)

使用指针数组函数实现冒泡排序 冒泡排序基本思想&#xff1a; 通过对待排序序列从前向后&#xff08;从下标较小的元素开始&#xff09;,依次对相邻两个元素的值进行两两比较&#xff0c;若发现逆序则交换&#xff0c;使值较大的元素逐渐从前移向后部&#xff0c;就如果水底下…

使用vue-pdf插件加载pdf

安装&#xff1a; // 安装这个版本&#xff0c;其它版本会有千奇百怪的错&#xff0c;这个版本和4.0.0都是可以的 cnpm install vue-pdf4.2.0// 安装pdfjs-dist cnpm install pdfjs-dist2.5.207 使用&#xff1a; // 我的css样式是pxToRem&#xff0c;友友们使用可能样式会有…

k8s中服务器容器tcp连接数量优化

netty的http1服务器在运行一段时间后会无法提供服务&#xff0c;返回客户端socket hang up 使用apipost测试抓包显示三次握手后被reset 修改net/core/somaxconn 登录容器&#xff0c;cat /proc/sys/net/core/somaxconn显示128&#xff0c;对于一个服务器来说&#xff0c;这个…

最新版的Tuxera NTFS 2024 支持macOS 12系统

备受期待的Tuxera NTFS 2024 Mac中文版终于上线了&#xff0c;小编第一时间为您带来&#xff01;Tuxera NTFS 2024 中文版是一款非常好用的NTFS读写工具&#xff0c;可以让您完整的读写兼容NTFS格式驱动器&#xff0c;对磁盘进行访问、编辑、存储和传输文件等。同时还包括开源磁…

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等

文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列&#xff08;RAID&#xff09;5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层&#xff0c;接…

【机器学习300问】12、为什么要进行特征归一化?

当线性回归模型的特征量变多之后&#xff0c;会出现不同的特征量&#xff0c;然而对于那些同是数值型的特征量为什么要做归一化处理呢&#xff1f; 一、为了消除数据特征之间的量纲影响 使得不同指标之间具有可比性。例如&#xff0c;分析一个人的身高和体重对健康的影响&…

计算机网络学习first day

In the first day.  首先&#xff0c;我们要先有清晰地学习思路&#xff0c;然后介绍计算机网络的发展及在信息时代的各类应用及带来的一些负面问题。然后是对因特网进行概述&#xff0c;包括网络&#xff0c;互联网和因特网的相关概念&#xff0c;因特网发展的三个历史阶段&a…

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

VitePress-02-基于文件的路由介绍以及路由基本使用

说明 本文主要介绍一下内容&#xff1a; 1、【项目中的md文件】与 【页面访问路由】之间的关系 2、md文件中创建路由的基本语法 文件与路由的映射关系 VitePress使用的是基于文件的路由。 什么意思呢&#xff1f; 就是&#xff0c;【浏览器中访问页面的地址】 和 【项目文件的目…

python 格式化字符、列表推导式

文章目录 1. 格式化字符串f-string1. 1 简单使用1.2 表达式求值与函数调用1.3 多行f-string1.4 对齐格式1.5 宽度与精度描述符 2. 列表表达式2.1 列表推导式的2种形式2.2 单个for循环语法案例 2.3 双重for循环语法案例 参考 1. 格式化字符串f-string f-string&#xff0c;亦称…

基于SpringBoot+vue的在线视频教育平台的设计与实现,附源码,数据库

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

ubuntu使用docker compose一键部署项目

1、将前面手动部署的容器和镜像全部删除 docker rmi hmall (hmall镜像名) docker rmi image_id rmi 是删除多个 rm是删除一个 2、执行命令 docker compose up -d http://192.168.79.129:18080/search.html 访问安装成功&#xff01; 该ip是虚拟机ubuntu的ip 3、docker-compos…

Rust 程序设计语言学习——基础语法

Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率&#xff0c;它的执行效率也是令人称赞的&#xff0c;是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发&#xff0c;最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apach…

k8s-认证授权 14

Kubernetes的认证授权分为认证&#xff08;鉴定用户身份&#xff09;、授权&#xff08;操作权限许可鉴别&#xff09;、准入控制&#xff08;资源对象操作时实现更精细的许可检查&#xff09;三个阶段。 Authentication&#xff08;认证&#xff09; 认证方式现共有8种&…

报考中国人民大学金融硕士项目后,我的人生像开了加速器

或许你一直在寻找一个能够改变你人生的机会&#xff0c;一个能够让你加速实现梦想的平台。如果你对金融领域充满热情&#xff0c;并且渴望在这个领域取得卓越成就&#xff0c;那么中国人民大学金融硕士项目将为你提供一个绝佳的选择。 中国人民大学与加拿大女王大学金融硕士项…

白酒:传统工艺与现代技术的完善结合

云仓酒庄豪迈白酒&#xff0c;是中国的酒文化中的一颗璀璨明珠。它不仅是一种产品&#xff0c;更是一种文化、一种情感的载体。在云仓酒庄豪迈白酒的酿造过程中&#xff0c;传统工艺与现代技术得到了完善的结合&#xff0c;共同诠释了这种美酒的与众不同魅力。 首先&#xff0…

yarn集群datanode无法启动问题排查

一、问题场景 hdfs无法访问&#xff0c;通过jps命令查看进程&#xff0c;发现namenode启动成功&#xff0c;但是所有datanode都没有启动&#xff0c;重启集群&#xff08;start-dfs.sh&#xff09;后仍然一样 二、原因分析 先看下启动的日志有无报错。打开Hadoop的日志目录 …