【MySQL】--- 数据库基础

 Welcome to 9ilk's Code World

       

(๑•́ ₃ •̀๑) 个人主页:       9ilk

(๑•́ ₃ •̀๑) 文章专栏:     MySQL   


本篇博客我们来建立一下数据库的相关概念,主要理解什么是数据库以及mysql和mysqld,MySQL架构等问题。


🏠 登录选项认识

mysql -h  127.0.0.1 -P 3306 -u root -p

注:1. 如果没有写 -h 127.0.0.1 默认是连接本地。

        2.如果没有写 -P 3306 默认是连接3306端口号。

我们登录时当然也可以简写成:

mysql -u  root -p

总结:

1-h 指明登陆部署了mysql服务的主机,-P指明我们要访问的端口号,-u指明登录用户,-p指明需要输入的密码。

2. 密码输入的时候是不回显的。

🏠 什么是数据库

(1) MySQL本质是一种网络服务。

1. mysql是数据库服务的客户端。

2.mysqld是数据库服务的服务器端(可执行程序带d后缀的代表是守护进程)

3.MySQL本质是基于C(mysql)S(mysqld)模式的一种网络服务。

验证mysqld是服务端:

netstat -lntp
//netstat -lntp 命令会列出所有处于监听状态的 TCP 端口,并且显示这些端口对应的进程信息,同时以数字形式显示地址和端口号,不进行域名解析。

我们知道端口号是用来表示一台计算机中特定进程所提供的服务。上图查询结果显示mysqld绑定了3306这个端口号,证明它是服务端。

(2)MySQL服务

Q1 : 为什么我们MySQL需要启动服务后才能用mysql连接?

因为MySQL是一种网络服务,我们可以查看它对应的端口号。

Q2 : MySQL服务是什么?

MySQL服务是一套提供数据存取服务的网络程序。

(3) 区分相关概念

  • 1. 口语中数据库:在磁盘或内存中存储额特定结构与组织的数据,即在磁盘上存储的一套数据库方案(文件)(数据库最终要么存储在磁盘要么存储在内存,我们当前只考虑磁盘,而存储在磁盘中的一组数据库文件就可以称为数据库)
  • 2. 数据库服务:mysqld。
  • 3. 数据库客户端:mysql。

(4) 为什么不直接用数据库存储数据而要用数据库?

1.  一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容管理能力,这是站在用户角度上的。

比如:程序员对一个有上百万行内容的文件进行有效信息的提取,此时他需要打开文件,手动统计,这明显是效率低下的,文件只给我们提供基本的读写功能,但是没有提供文件内容(数据)管理功能。

文件存储还有以下缺点:

1.文件的安全性问题

2.文件不利于数据查询和管理

3.文件不利于存储海量数据

4.文件在程序中控制不方便

2. 数据库本质是对数据内容存储的一套解决方案,用户给数据库提供相关字段或者要求,数据库就能根据需求进行分析,直接返回结果。这样就很好地将数据管理起来了,方便数据管理。

(5) 总结什么是数据库

1. 宏观上:数据库整体是一套对外的数据存储解决方案。由数据库客户端(mysql),数据库服务端(mysqld)以及数据库文件构成。

2.局部上:数据库是磁盘上某种提供数据存储能力的文件,它不是我们平常所说的普通文件,它有自己的内部格式,支持mysqld对其进行增删查改。

🏠 见一见数据库

样例:mysql建立一个数据库 建立一张表结构 插入一些数据 对比mysql在linux中对应是如何表现的。(简单看看)

(1) 查看数据库

show databases;

(2) 建立数据库

create database 数据库名; //注意以分号为结尾

创建数据库后数据库相关目录变化:

我们发现创建完helloworld数据库之后,在mysql目录下新建了helloworld目录。

结论 :  建立数据库,本质就是linux下的一个目录。

(3) 建立一张表

建立一张表之前得先选择哪个数据库,也就是相当于选择那个目录。

use 数据库名称;

建立表操作:

create table 表名称 (id int,name varchar(32),gender varchar(2)
);
//int varchar是类型

现象:

结论 : 在数据库内创建表,本质是在Linux下新建对应文件即可。

(4)  表中插入数据

insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');

(5) 表中查询数据

select * from student;

Q:前面的建立数据库,建立表,查询等操作是谁帮我们做的?

mysqld服务帮我们做的。程序员通过mysql客户端,然后mysqld帮我们对数据文件实现对应要求。

结论 :数据库本质也是文件,只不过这些文件并不由我们程序员直接操作,而是数据库服务帮我们操作。

注:数据库是一种行列式结构,有自己的逻辑存储结构。

🏠 主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。

  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。

  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。

  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。

  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中

🏠 服务器数据库表之间的关系

1. 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序(mysqld),这个管理程序可以管理多个数据库(目录),一般开发人员会针对每一个应用创建一个数据库。

2. 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据

3. 数据库服务器、数据库和表的关系如下:

🏠 MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

1. 最上面MySQL客户端,它可以是我们在Linux上命令行界面,也可以是C/C++连接,图形化界面等。

2. 中间整体的MySQL SERVER主要由三部分组成:

  • 第一层连接池:用于管理客户端连接,主要用来保存链接,鉴别用户权限以及其他安全问题,有助于减少连接开销,提高性能。
  • 第二层:接收客户端发送的 SQL 语句,并对其进行解析,检查语法错误;同时会对解析后的SQL语句进行优化然后按照SQL协议传递给下一层。
  • 第三层存储引擎:存储引擎负责数据的存储、索引、事务处理等。它的作用类似驱动程序,从上层接受转化处理后的SQL语句后,它会进行解释,真正帮我们访问表结构,数据库等

Q:为什么第三层存在好几个存储引擎?

数据库是一套数据存取的解决方案,但是我们不可能只存单一类型的数据,我们存的数据是有种类差别的(文档型,二进制,..),此时针对不同种类数据我们可能需要采取不同存储方案,此时效率就会有差别,因此MySQL给我们提供各种存储引擎提高效率满足上层需求。

注:MySQL是支持热插拔的,类似插件。我们需要用哪一个就把哪一个存储引擎加载到MySQL里。

总结:MySQL依旧是一个文件系统,只不过它是处于操作系统提供的文件系统之上的一套存储解决方案。

🏠 SQL语句分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构代表指令: create, drop, alter。
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作代表指令: insert,delete,update。
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务代表指令: grant,revoke,commit。

类比数据结构链表,DDL类似定义一个链表,DML类似实现链表的头删,逆置等操作。

🏠 查看MySQL存储引擎

(1) 什么是存储引擎?

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

(2)查看存储引擎

show engines;

 show engines \G

(3) 存储引擎对比

其中常用的存储引擎是InnoDB和MyISAM。


总结一下:

1. 什么是数据库?

数据库整体是一种对外的数据存取解决方案,本质上是一种基于CS模式的网络服务。宏观上,我们把数据库理解为客户端,服务端,数据库文件这一套解决方案;局部上,我们把数据库理解为磁盘上具有特定化结构的数据库文件,支持服务端对其进行增删查改,有自己的格式。

2.如何理解mysql和mysqld,以及如何理解建立数据库和建立表?

(1) mysql是数据库的客户端,用户在客户端向服务端提出要求;mysqld是数据库服务端,根据要求对数据库文件进行操作。

(2)建立数据库本质是Linux上新建目录,而建立表本质是Linux上在对应目录新建文件。

3.MySQL整体架构?

客户端 - MySQL SERVER(连接池,中间解析层,存储引擎) - 依赖的文件系统。

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

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

相关文章

Vue中纯前端实现导出简单Excel表格的功能

Vue 前端Excel导出 Vue中纯前端导出简单Excel表格的方法(使用vue-json-excel插件) 前言 在许多的后台系统中少不了导出Excel表格的功能,在项目中纯前端使用vue-json-excel插件来实现简单Excel表格的导出功能。 使用方法 1、安装依赖 npm install vue-json-exc…

KeyFormer:使用注意力分数压缩KV缓存

Keyformer: KV Cache Reduction through Key Tokens Selection for Efficient Generative Inference 202403,发表在Mlsys Introduction 优化KV cache的策略,主要是集中在系统级别的优化上,比如FlashAttention、PagedAttention,它…

Linux 权限管理实践:精确控制用户对 systemctl 和 journalctl 命令的使用

前言 在 Linux 系统管理中,精确控制用户对特定命令的访问权限是一项关键的安全实践。使用 systemctl 和 journalctl 命令时,不当的权限设置可能会导致不必要的风险。本篇博客将详细讨论如何通过 sudoers 文件和 Polkit 策略为不同用户配置 systemctl 和…

SSH连接成功,但VSCode连接不成功

环境 在实验室PC上连接服务器234 解决方案:在VSCode中重新添加远程主机 删除旧的VSCode Server 在远程主机上,VSCode会安装一个‘vscode-server’服务来支持远程开发,有时旧的‘vscode-server’文件可能会导致问题,删除旧的&am…

【Qt】qt安装

在工作一年之后,还是想做一个Qt的教程,遥想研一刚刚接触Qt,从0到1学习,没有什么参考书籍,网上的资料也不多,幸好Qt官方文档写得好,加上自己肯研究,才堪堪入门。 现在我想自己写一个…

Web开发 -前端部分-CSS

CSS CSS&#xff08;Cascading Style Sheet&#xff09;:层叠样式表&#xff0c;用于控制页面的样式&#xff08;表现&#xff09;。 一 基础知识 1 标题格式 标题格式一&#xff1a; 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…

YOLOv8目标检测(六)_封装API接口

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…

51c视觉~YOLO~合集6~

我自己的原文哦~ https://blog.51cto.com/whaosoft/12830685 一、其他yolo 1.1 Spiking-YOLO​ 使用常规深度神经网络到脉冲神经网络转换方法应用于脉冲神经网络域时&#xff0c;性能下降的很多&#xff0c;深入分析后提出了可能的解释&#xff1a;一是来自逐层归一化的效率…

如何在 Ubuntu 22.04 上安装 Strapi CMS

简介 Strapi 是一个使用 JavaScript 构建的开源、无头内容管理系统 (CMS)。与其他无头 CMS 一样&#xff0c;Strapi 开箱即用不带前端。它使用 API 作为其前端&#xff0c;允许你使用流行的框架&#xff08;如 React 和 Next.js&#xff09;构建网站。Strapi 基于插件系统&…

数字IC后端零基础入门基础理论(Day1)

数字IC后端设计导入需要用到的input数据如下图所示。 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 Netlist: 设计的Gate level&#xff08;门级&#xff09;网表。下图所示为一个计数器设计综合后的门级netlist。 从这个netlist中我们看到这个设计顶层的名字叫counte…

序列模型的使用示例

序列模型的使用示例 1 RNN原理1.1 序列模型的输入输出1.2 循环神经网络&#xff08;RNN&#xff09;1.3 RNN的公式表示2 数据的尺寸 3 PyTorch中查看RNN的参数4 PyTorch中实现RNN&#xff08;1&#xff09;RNN实例化&#xff08;2&#xff09;forward函数&#xff08;3&#xf…

WSL2内部的Ubuntu怎么设置网络内桥接模式,弄了好久老是不成功,怎么办?

环境: Win10专业版 WSL2 Ubuntu22.04 问题描述: WSL2内部的Ubuntu怎么设置网络内桥接模式 解决方案: 方法一 1.控制面板开启,Hyper-V 管理器 2.重启电脑 3…创建外部虚拟交换机 打开 Hyper-V 管理器,在右侧操作面板中点击“虚拟交换机管理器”。 选择“创建虚…

redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip

redis集群 服务器更换ip&#xff0c;怎么办&#xff0c;怎么更换redis集群的ip 1、安装redis三主三从集群2、正常状态的redis集群3、更改redis集群服务器的ip 重启服务器 集群会down4、更改redis集群服务器的ip 重启服务器 集群down的原因5、更改redis集群服务器的ip后&#xf…

记录学习《手动学习深度学习》这本书的笔记(五)

这一章是循环神经网络&#xff0c;太难了太难了&#xff0c;有很多卡壳的地方理解了好久&#xff0c;比如隐藏层和隐状态的区别、代码的含义&#xff08;为此专门另写了一篇【笔记】记录对自主实现一个神经网络的步骤的理解&#xff09;、梯度计算相关&#xff08;【笔记】记录…

人大金仓数据linux安装注意事项

人大金仓数据linux安装注意事项 本次是个人搭建虚拟机安装centos7的环境下进行安装。 1、安装流程参照https://help.kingbase.com.cn/v9/install-updata/install-linux/preface.html。 2、mount安装文件报错 操作手册提供mount的命令如下&#xff1a; mount KingbaseES_V009R0…

【GIS教程】使用GDAL-Python将tif转为COG并在ArcGIS Js前端加载-附完整代码

目录 一、数据格式 二、COG特点 三、使用GDAL生成COG格式的数据 四、使用ArcGIS Maps SDK for JavaScript加载COG格式数据 一、数据格式 COG&#xff08;Cloud optimized GeoTIFF&#xff09;是一种GeoTiff格式的数据。托管在 HTTP 文件服务器上&#xff0c;可以代替geose…

探索智能时代:如何利用AI一键生成PPT改变演示文稿的制作方式

在这个科技飞速发展的时代&#xff0c;信息的传递方式发生了翻天覆地的变化。曾几何时&#xff0c;我们还在为制作PPT而熬夜&#xff0c;手动选择模板、调整布局&#xff0c;甚至为每一张幻灯片的内容苦思冥想。然而&#xff0c;随着人工智能技术的不断进步&#xff0c;制作PPT…

【LDAP】LDAP概念和原理介绍

目录 一、前言 二、什么是LDAP&#xff1f; 2.1 什么是目录服务&#xff1f; 2.2 LDAP的介绍 2.3 为什么要使用LDAP 三、LDAP的主要产品线 四、LDAP的基本模型 4.1 目录树概念 4.2 LDAP常用关键字列表 4.3 objectClass介绍 五、JXplorer工具使用 一、前言 对于许多的…

nginx模板文件

nginx模板配置 背景模板文件nginx.conf容器验证 背景 nginx通过读取环境变量完成对nginx.conf的相关代理设置&#xff0c;但是nginx.conf不支持直接读取环境变量、所以使用nginx的模板功能达到相应目的 带有环境变量的 Nginx 配置文件模板。在 Docker 化部署 Nginx 时&#x…

善于运用指针(四)--指针数组和多重指针

一个数组的元素均为指针类型&#xff0c;称为指针数组。指针数组中的每一个元素应都有地址&#xff0c;相当于一个变量。 文章目录 前言 一、指针数组的定义 二、指向指针数组的指针变量 1.指针数组 2.多重指针 三、main函数的参数 1.argc argv envp 总结 前言 主要是指针数组…