【MySQL】数据库基础

1.数据库基本认识

        广义上来说数据库是长期存储在磁盘上的数据文件的集合,而MySQL是采用了C/S模式实现的一个网络服务,它由MySQL(数据库客户端) 、MySQLD (数据库服务)、磁盘上的数据库文件组成。MySQL服务是一套给用户提供数据存储的一个网络程序,也就是数据库管理系统。

(1)C/S 模式

        那么C/S模式是什么呢?就拿应用市场上的抖音来举例子,每个人的手机上都可以装有抖音的APP,但是这个APP并不是抖音的全部,他只是用户访问后台服务器和数据库的媒介。而字节跳动公司内部肯定有提供给抖音平台运行的服务器和数据库,而在这里手机上安装的抖音就叫做客户端字节跳动提用于给抖音运行并且维护抖音的服务器叫做服务器端。

2.数据库文件

(1)用数据库存储的原因

        数据库本质上就是存储数据的,为什么不用文件存储呢?

        因为文件虽然可以存储数据,但是文件并没有很好的数据管理的能力,比如说无法高效的完成大量数据的增删查改的工作,假如说文件中有一万行IP地址,然后需要统计一下以120开头的地址,这时程序员就只能手写代码读取文件内容判断并统计,对程序员来说就很麻烦,如果在增加一个要求把120开头的换成130,就更麻烦了,所以使用文件来存储数据的话,会导致用户对数据的增删查改都不方便,这时就必须要用到数据库了。

(2)数据库操作的过程

        那么我们一般是使用数据库,它的底层工作流程如下图所示。

        首先客户端进行数据操作的请求,而数据库mysqld(服务器端)接收到请求以后,对在磁盘中的数据进行处理,处理完的数据由mysqld 将结果返回给客户端。

(3)数据库的路径(在Linux操作系统下)

(1) 数据库配置文件的存储路径为

hjy@VM-16-3-ubuntu:/$ ls /etc/mysql/my.cnf

 (2) 数据库数据存放地址为  /var/lib/mysql 中

  在这个目录下存放的所有的内容都和数据库中的数据库名匹配的上,所以在Linux操作系统下的mysql中创建一个数据库,本质上就是在创建一个目录。

3.主流的数据库

SQL Sever:微软的产品,.Net程序员的最爱,中大型项目。
Oracle:甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQLOracle

MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
SQLite:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了
H2: 是一个用]ava开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

4. 服务器、数据库、表关系

(1)数据库服务器:只是在机器上安装了一个数据库管理系统程序(DBMS),这个可以管理多个数据库,一般的开发者会对每一个应用创建一个数据库。

(2)一般会在一个数据库中建立多个表,用以保存程序中实体的数据。

5. MySQL 的架构

(1)连接层(connection layer)

连接层是MySQL架构的顶层,负责处理客户端与服务器之间的连接请求。其主要组件包括:

        连接管理器:负责管理客户端与服务器之间的连接,包括连接的建立、维护和关闭

        认证模块:负责对客户端进行身份验证,验证客户端提供的用户名和密码是否正确

        安全套接字层(SSL):提供加密通信和安全认证功能,用于保护连接的安全性

        线程池:用于管理处理客户端请求的线程或进程,以提高系统的并发处理能力

(2)服务层(Service Layer) 

服务层是MySQL架构的中间层,负责解析和执行客户端发送的SQL指令。甚至是对指令进行优化

(3)存储引擎层(Storage Engine Layer)


存储引擎层是MySQL架构的底层,负责将上一层经过分析的SQL语句进行解释,从而真正的进行存储和管理数据。

MySQL支持多种存储引擎,每种存储引擎都有自己的特点和适用场景。常见的存储引擎包括InnoDB、MyISAM、Memory等

InnoDB:MySQL的默认存储引擎,适合搜索查找的操作。

MyISAM:适合对大文本进行读取。插入的并发度高,适合大量的select和读取操作。

Memory:将所有数据存储在RAM中,提供了非常快速的读写速度,但数据不是持久化的,适用于临时数据存储和缓存。

具体来说,存储引擎是数据库管理系统如何存储数据、如何给存储的数据建立索引以及和如何更新、查询数据等这些技术的具体实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎,换句话说它支持存储引擎的热插拔,这意味着用户可以根据不同的应用场景和需求,在MySQL服务器运行时动态地加载和卸载相应的存储引擎,这种架构使得MySQL具有良好的可扩展性、灵活性和性能。

(4)文件系统层(File systeam)

用于存储数据,是存在于操作系统之上的一套存储数据的方案。文件系统层包含了具体的日志文件和数据文件以及MySQL相关的程序。它负责数据的物理存储和读取,是存储引擎层与硬件之间的桥梁。

 以下是完整的MySQL架构

6. SQL语句分类


SQL语句主要可以分为以下几类:

数据查询语言(DQL, Data Query Language)
数据查询语言主要用于查询数据库中的数据。DQL的基本结构由SELECT子句、FROM子句和(可选的)WHERE子句组成。代表关键字为SELECT。例如,查询某个表中的特定字段或记录。

数据操纵语言(DML, Data Manipulation Language)
数据操纵语言用于添加、删除、更新数据库中的数据。DML主要包括三种形式:
插入(INSERT):用于向表中插入新的记录。
更新(UPDATE):用于修改表中的现有记录。
删除(DELETE):用于从表中删除记录。

数据定义语言(DDL, Data Definition Language)
数据定义语言用于定义和修改数据库中对象的结构,如表、视图、索引等。DDL的主要操作包括创建(CREATE)、删除(DROP)、修改(ALTER)等。例如,使用CREATE TABLE语句创建一个新表,使用DROP TABLE语句删除一个表,使用ALTER TABLE语句修改表结构。

事务控制语言(TCL, Transaction Control Language)
事务控制语言用于管理数据库事务,确保数据的一致性和完整性。TCL的主要操作包括提交(COMMIT)、回滚(ROLLBACK)和保存点(SAVEPOINT)等。提交操作用于将事务中的更改永久保存到数据库中,回滚操作则用于撤销事务中的更改,而保存点则允许在事务中设置临时的回滚点。

数据控制语言(DCL, Data Control Language)
数据控制语言用于控制对数据库及其对象的访问权限和安全级别。DCL的主要操作包括授权(GRANT)和回收权限(REVOKE)等。通过这些操作,数据库管理员可以授予或撤销用户对数据库对象的访问权限,从而确保数据库的安全性

SQL语句并不特指MySQL数据库中的语句,而是结构化查询语言(Structured Query Language)的简称,是一种用于存取数据以及查询、更新和管理关系数据库系统的标准编程语言。SQL是一种数据库查询和程序设计语言,用于与数据库通信并执行各种操作

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AWS IAM

一、介绍 1、简介 AWS Identity and Access Management (IAM) 是 Amazon Web Services 提供的一项服务,用于管理 AWS 资源的访问权限。通过 IAM,可以安全地控制用户、组和角色对 AWS 服务和资源的访问权限。IAM 是 AWS 安全模型的核心组成部分&#xf…

windows C#-异步编程场景(二)

等待多个任务完成 你可能发现自己处于需要并行检索多个数据部分的情况。 Task API 包含两种方法(即 Task.WhenAll 和 Task.WhenAny),这些方法允许你编写在多个后台作业中执行非阻止等待的异步代码。 此示例演示如何为一组 User 捕捉 userId 数据。 private stati…

web——sqliabs靶场——第九关——时间盲注

什么是时间盲注 时间盲注是指基于时间的盲注,也叫延时注入,根据页面的响应时间来判断是否存在注入。 使用sqlmap不同的技术 sqlmap --technique 参数用来设置具体SQL注入技术 B: Boolean-based blind 基于布尔的忙逐步 E:Error-based 报错注入 U&am…

Vue所有图片预加载加上Token请求头信息、图片请求加载鉴权

环境 Vue2、“axios”: “0.18.1”、webpack:“4.46.0”、ant-design-vue: “1.7.8” 描述 项目对安全要求比较高,所有后台返回的图片加载时都要加上token。比如资源图片,拍照打卡的图片,都需要鉴权。如果不带上token参数&…

此电脑中的百度网盘图标无法删除解决方法2024/11/18

教程很详细,直接上步骤 对于这种情况,修改注册表是很麻烦的,眨眼睛在这里推荐这位大佬的开源软件MyComputerManager 点击跳转MyComputerManager下载链接

【模型级联】YOLO-World与SAM2通过文本实现指定目标的零样本分割

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

Postman之变量操作

系列文章目录 Postman之变量操作 1.pm.globals全局变量2.pm.environment环境变量3.pm.collectionVariables集合变量4.pm.variables5.提取数据-设置变量-进行参数化串联使用 postman中分为全局变量、环境变量、集合变量、和普通变量 分别使用pm.globals、pm.environment、pm.co…

linux 常用命令指南(存储分区、存储挂载、docker迁移)

前言:由于目前机器存储空间不够,所以‘斥巨资’加了一块2T的机械硬盘,下面是对linux扩容的一系列操作,包含了磁盘空间的创建、删除;存储挂载;docker迁移;anaconda3迁移等。 一、存储分区 1.1 …

python读取Oracle库并生成API返回Json格式

一、安装必要的库 首先,确保已经安装了以下库: 有网模式 pip install flask pip install gevent pi install cx_Oracle离线模式: 下载地址:https://pypi.org/simple/flask/ # a. Flask Werkzeug-1.0.1-py2.py3-none-any.whl J…

Nature子刊 | 单细胞测序打开发育系统溯源新视角

神经系统是人体最为复杂且最为重要的器官之一。深入理解神经发育对于神经科学研究和再生医学具有举足轻重的作用。但神经元多样性的起源仍是一个亟待解决的难题。日益发展的单细胞测序技术让研究人员们有机会从细胞的异质性入手,对不同细胞类型之间的关联和分化路径…

5G CPE与4G CPE的主要区别有哪些

什么是CPE? CPE是Customer Premise Equipment(客户前置设备)的缩写,也可称为Customer-side Equipment、End-user Equipment或On-premises Equipment。CPE通常指的是位于用户或客户处的网络设备或终端设备,用于连接用户…

新增道路查询最短路径

一、问题描述 给你一个整数 n 和一个二维整数数组 queries。 有 n 个城市&#xff0c;编号从 0 到 n - 1。初始时&#xff0c;每个城市 i 都有一条单向道路通往城市 i 1&#xff08; 0 < i < n - 1&#xff09;。 queries[i] [ui, vi] 表示新建一条从城市 ui 到城市…

【数据结构】链表解析与实战运用(1.8w字超详细解析)

目录 引言 链表概念及结构 链表的优缺点 链表的分类 1.单向或者双向 2.带头或者不带头 3.带循环或者非循环 单链表接口函数的实现 接口函数一览 创建空节点&打印链表 尾部插入 头部插入 尾部删除 头部删除 查找 在pos位置之后插入节点 在pos位置之前插入节…

Python练习31

Python日常练习 题目&#xff1a; 分别输入两个整数以及一个加减乘除中的算术运算符&#xff0c;输出运算结果&#xff0c; 若输入其它运算符&#xff0c;则退出程序; 例如&#xff1a; 输出格式如下 【输入一个整数&#xff1a;】1 【输入另一个整数&#xff1a;】2 …

uniapp 自定义加载组件,全屏加载,局部加载 (微信小程序)

效果图 全屏加载 页面加载使用 局部加载 列表加载里面使用 使用gif html <template><view><view class"" v-if"typeFullScreen"><view class"loading" v-if"show"><view class""><i…

Mac 修改默认jdk版本

当前会话生效 这里演示将 Java 17 版本降低到 Java 8 查看已安装的 Java 版本&#xff1a; 在终端&#xff08;Terminal&#xff09;中运行以下命令&#xff0c;查看已安装的 Java 版本列表 /usr/libexec/java_home -V设置默认 Java 版本&#xff1a; 找到 Java 8 的安装路…

动态规划-最长公共子序列

题目 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何字符&#xff0…

nvm安装node遇到的若干问题(vscode找不到npm文件、环境变量配置混乱、npm安装包到D盘)

问题一&#xff1a;安装完nvm后需要做哪些环境变量的配置&#xff1f; 1.打开nvm文件夹下的setting文件&#xff0c;设置nvm路径和安装node路径&#xff0c;并添加镜像。 root: D:\software\nvm-node\nvm path: D:\software\nvm-node\nodejs node_mirror: https://npmmirror.c…

Zookeeper的简单使用Centos环境下

目录 前言 一、ZOokeeper是什么&#xff1f; 二、安装Zookeeper 1.进入官网下载 2.解压到服务器 3.配置文件 三.使用Zookeeper 3.1启动相关指令 3.2其他指令 3.3ACL权限 总结 前言 记录下安装zookeeper的一次经历 一、ZOokeeper是什么&#xff1f; ZooKeeper是一…

疫情中的图书馆管理:Spring Boot系统设计

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了疫情下图书馆管理系统的开发全过程。通过分析疫情下图书馆管理系统管理的不足&#xff0c;创建了一个计算机管理疫情下图书馆管理系统的方案。文章介绍了疫情下图…