MySQL数据库的基础概念

目录

顾名思义,数据库是用于存储数据的,那这些数据被存储在哪呢?

文件也能存储数据,那在这个基础上,为什么还要搞出一个数据库来存储数据呢? 

MySQL的客户端登录/退出指令、服务端的启动/关闭指令

数据库的客户端和服务端以及表之间的关系

存储在表中的数据的逻辑存储结构和物理存储结构

SQL指令(又称SQL语句)的分类


顾名思义,数据库是用于存储数据的,那这些数据被存储在哪呢?

在<<如何在Centos 7环境下安装MySQL并登录>>一文中我们说过,下载好MySQL后,我们的Linux服务器中会有3个文件,分别是mysql、mysqld、my.cnf,其中mysql是客户端可执行文件,mysqld是服务端可执行文件(d表示守护进程),my.cnf是mysql和mysqld的配置文件,所以实际上MySQL就是一个网络服务器,和我们以前自己编写TCP服务端和客户端是一样的,都是基于客户端和服务端的模式。

通过指令sudo vim /etc/my.cnf打开客户端mysql和服务端mysqld共同的配置文件my.cnf后,如下图1红框处所示,datadir配置项后面的路径就是数据库中所有数据的存储路径了,如下图2所示,通过ls命令可以看到该datadir路径上有一堆文件,而数据库中的所有数据就存储在这些文件中。

然后要知道的是,如下图3所示,MySQL数据库中的数据是存储在MySQL服务器端(即mysqld进程)上的,而不是存储在MySQL客户端(即mysql进程)上,客户端主要用于连接服务器、发送查询请求、接收查询结果等操作,实际的数据库文件和数据都是存储在服务器端上的,当客户端执行查询时,请求会发送到服务器,服务器负责在其数据存储中进行相应的操作,并将处理结果返回给客户端。总体而言,数据库系统的基本架构是客户端/服务器模型,其中数据存储在服务器端,而客户端负责与服务器进行通信和交互。

说一下,就算mysqld服务端被删除了,该datadir路径中的所有文件以及文件中的数据都是不会被删除的,这就像就算银行倒闭了,其中的员工也都跑路了,但广大人民存在里面的钱是一定不会被卷走的,否则就坑爹了。

  • 图1如下。
  • 图2如下。 
  • 图3如下。

文件也能存储数据,那在这个基础上,为什么还要搞出一个数据库来存储数据呢? 

通过上文我们知道了数据库中的所有数据本质也是被存储在datadir路径上的一个个文件中的,即我们把想要存储的数据存进数据库中时,本质上数据库这个软件层帮我们做的事就是完成文件的创建,并把用户输入的数据存进该文件中,那么问题来了,我们自己也可以创建文件,并将数据写入到该文件中啊?为什么非要搞出一个数据库来呢?原因如下:

  • 举个例子,假如我们曾经往某个文件中写入了1w个IP地址,如果此时有一个要求是需要我们在该文件中找出所有开头是120的IP地址,并将开头从120改成119,然后统计最后改了多少个,如果靠用户自己去写代码,比如调用fread、fwrite等接口编写一个程序去达成这个要求,则对用户的成本就太高了,用户不一定能成功地把这个程序给完美地实现出来,而如果有数据库的存在,则只需要调用几条指令即可达成这个要求,就大大降低了用户的成本,这就简单地回答了为什么要有数据库这个软件层的存在。

通过上面的简单介绍,我们还能举一反三为什么要有数据库的存在,如下:

  • 如果靠用户自主管理文件中的数据,则数据误操作后无法进行回滚,比如在上面的例子中改IP地址时,如果不小心把整个文件的数据清空了,则靠用户自己是很难还原的,而如果有数据库的存在,则很容易做到回滚。
  • 如果靠用户自主管理文件中的数据,因为文件中的数据没有以某种数据结构被组织起来,所以用户自主在文件中查找目标数据时只能一行行遍历,效率低下;而数据库则不同,数据库在管理文件中的数据时就会将其以某种数据结构组织起来以提供查询效率。
  • 如果靠用户自主管理文件中的数据,则相比于靠数据库来管理文件中的数据,明显前者是很不方便的。
  • 如果靠用户自主管理文件中的数据,则文件中的数据量越大,用户自主管理操控数据的成本就越高。

所以综上可以发现,数据库的本质就是提供了一套高效的用于【对文件中的数据做各种控制和管理以及操作】的方案,这样一来程序员就不用自己手动编写代码去操作文件中的数据了。

然后说一下,虽然数据库和OS一样都负责管理并操作文件,但他俩管理并操作的侧重点是不同的,比如OS主要是负责管理并操作一个文件的属性,管理这个文件的名字,提供操作该文件的访问操作函数(比如键盘文件的IO接口就是驱动层提供给OS,然后OS提供给键盘文件的struct file的),控制这个文件被放在哪个路径;而数据库则主要是负责对文件中的数据,即对文件的内容做操作、做管理。

MySQL的客户端登录/退出指令、服务端的启动/关闭指令

登录mysql客户端以连接服务端mysqld的方式如下:

解释说明:

  • -h: 表示你要连接的MySQL服务端进程mysqld所在的主机,127.0.0.1表示本地主机。
  • -P: 表示你要连接的MySQL服务端进程mysqld绑定的端口号,一般默认是3306。
  • -u: 表示用哪一个用户连接MySQL服务器,root表示超级用户。
  • -p: 表示该用户对应的密码,密码可以直接跟在-p后面,比如【 -p ‘123456’ 】,但一般为了不回显密码,一般是不会直接把密码写在-p后面的,而是输入完-p后就直接按回车以执行这条指令,然后在Enter password后面输入密码。
  • 注意,以上所有选项后面都是可以不带空格而直接传值的,比如mysql -h127.0.0.1 -P3306 -uroot -p。

说一下,我们在上文中说过一个结论【实际上MySQL就是一个网络服务器,和我们以前自己编写TCP服务端和客户端是一样的,都是基于客户端和服务端的模式】,现在从登录mysql客户端以连接服务端mysqld的这条指令中也能更好地佐证这一点,比如-h后面带了目的ip地址,-P后面带了目的端口号,如下图所示,这和我们以前编写的TCP客户端的使用方式【 ./TcpClient 127.0.0.1 8080】是一样的。

此外,如下图红框处所示,如果MySQL客户端进程mysql要连接的MySQL服务端进程mysqld在本地上,那么登录mysql客户端以连接服务端mysqld时只需要指明用户名和用户密码即可。同时因为在上文中说过-h、-P、-u等选项后面都是可以不带空格而直接传值的,所以这也是为什么在<<如何在Centos 7环境下安装MySQL并登录>>一文中用于登录客户端的指令是mysql -uroot -p。

退出mysql客户端以断开和服务端mysqld的连接的方式如下:

连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,如下图红框处所示,当要退出mysql时直接输入quit或exit或\q即可。

上面的操作都是针对于MySQL的客户端进程mysql,接下来咱们介绍一下启动和关闭MySQL的服务端进程mysqld的指令。

其实在<<如何在Centos 7环境下安装MySQL并登录>>一文中我们已经说明过启动和关闭MySQL的服务端进程mysqld的指令了,咱们再回顾一遍,如下:

  • 通过systemctl stop mysqld命令或service mysqld stop命令可以关闭MySQL服务端进程mysqld。
  • 通过systemctl start mysqld命令或service mysqld start命令可以启动MySQL服务端进程mysqld。
  • 通过systemctl restart mysqld命令或service mysqld restart命令可以重启MySQL服务端进程mysqld。

数据库的客户端和服务端以及表之间的关系

数据库的客户端和服务端以及表之间的关系如上图所示,图中的Client对应的就是MySQL客户端进程mysql,我们以后就是在客户端进程mysql中输入命令;MySQL对应的就是MySQL服务端进程mysqld。那么什么是DB和表呢?

每个DB(database)表示的是mysqld管理的数据库,每个表表示的是数据库DB管理的数据。说一下,在上文中说过MySQL中的所有数据都会被存储在datadir路径(也就是/var/lib/mysql)上的文件中,如下图所示就是datadir路径上的所有文件,这里笔者要说的是,实际上该路径中的每个目录文件就是一个DB,每个普通文件就是一个表。换言之,DB就是Linux系统下的一个目录文件,表就是Linux系统下的一个普通文件。如何证明这一点呢?请往下看。

如下图1所示,连接MySQL服务器后,通过create database语句创建一个名为helloworld的数据库后,这时/var/lib/mysql目录下就会多出一个名为helloworld的目录。如下图2所示,当我们通过drop database语句将这个helloworld数据库删除后,在/var/lib/mysql目录中这个helloworld目录也就不存在了。这也就证明了DB就是Linux系统下的一个目录文件,所以以后我们就要知道,所谓的使用create database语句创建一个数据库,本质就是在Linux系统中创建一个目录文件。

  • 图1如下。
  • 图2如下。

走到这里我们就证明了所谓的数据库DB本质就是Linux系统下的一个目录文件,现在笔者要说的是,所谓的use使用某个数据库DB本质就是在Linux系统中cd进入某个目录文件。这点如何证明呢?如下图左半部分所示,通过create database语句创建helloworld数据库后,再使用use语句使用helloworld数据库后,再在该helloworld数据库中通过create table语句创建一个student表后,如下图右边部分所示,此时helloworld目录文件中就有了两个student文件,这就证明了所谓的表就是Linux系统下的一个普通文件,并且也证明了所谓的use使用某个数据库DB本质就是在Linux系统中cd进入某个目录文件。所以以后我们就要知道所谓的使用create table语句创建一个表,本质就是在Linux系统中创建一个非目录普通文件。

既然说所谓的use使用某个数据库DB本质就是在Linux系统中cd进入某个目录文件,现在的问题是:在Linux中如果我忘记了我当前在哪个目录文件中可以通过pwd查询,那么在MySQL中如果我忘记了我当前在use使用哪个DB,我该如何知道这个信息呢?

答案:通过下图红框处的use指令使用helloworld数据库后,通过下图蓝框处的select database();指令即可知道你当前在use使用哪个数DB,下图粉框中的查询结果helloworld即可证明这一点。所以实际上select database();语句就对应Linux系统下的pwd命令。

对上面的内容做一下总结,走到这里我们就证明了4件事:

  1. 所谓的DB就是Linux系统下的一个目录文件。
  2. 所谓的表就是Linux系统下的一个普通文件。
  3. 所谓的use使用某个数据库DB本质就是在Linux系统中cd进入某个目录文件。
  4. SQL语句select database();就是Linux系统下的pwd命令。

然后我们以后要知道,所谓的使用create database语句创建一个数据库,本质就是在Linux系统中创建一个目录文件;所谓的使用create table语句创建一个表,本质就是在Linux系统中创建一个非目录普通文件。

存储在表中的数据的逻辑存储结构和物理存储结构

存储在表中的数据的逻辑存储结构:

  • 如下图所示,表中的数据是以二维表格的形式进行呈现的,包括行和列,其中每一行我们称之为是一条记录,而每一列都代表一个属性(属性列)。

存储在表中的数据的物理存储结构:

  • 在上文中证明过所谓的表就是Linux系统下的一个普通文件,所以表中的数据和普通文件中的数据没有什么不同,其物理结构就是一个字节一个字节紧挨着的连续存储在磁盘上的。

SQL指令(又称SQL语句)的分类

SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL语句可分为如下三类:

  • DDL(Data Definition Language)数据定义语言,用来控制操作存储数据的结构。比如create语句、drop语句、alter语句等。
  • DML(Data Manipulation Language)数据操作语言,用来控制操作结构中的数据。比如insert语句、delete语句、update语句等。说一下,在DML中又单独分了一个DQL(Data Query Language)数据查询语言,比如select语句、from语句、where语句等。
  • DCL(Data Control Language)数据控制语言,主要负责权限管理和事务,用于阻拦恶意攻击。比如grant语句、revoke语句、commit语句。

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

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

相关文章

如何查看PHP信息

创建一个 PHP 文件&#xff0c;比如 info.php&#xff0c;在其中添加以下代码&#xff1a; <?php phpinfo(); ?>访问这个文件&#xff08;例如&#xff0c;在浏览器中输入 http://localhost/info.php&#xff09;&#xff0c;它会显示 PHP 的所有配置信息。在这个页面…

服务器挖矿木马识别与清理

一、什么是挖矿木马 挖矿木马会占用CPU进行超频运算,从而占用主机大量的CPU资源,严重影响服务器上的其他应用的正常运行。黑客为了得到更多的算力资源,一般都会对全网进行无差别扫描,同时利用SSH爆破和漏洞利用等手段攻击主机。部分挖矿木马还具备蠕虫化的特点,在主机被成…

Threejs利用着色器编写动态飞线特效

一、导语 动态飞线特效是可视化数据地图中常见的需求之一&#xff0c;鼠标点击的区块作为终点&#xff0c;从其他区块飞线至点击区块&#xff0c;附带颜色变换或者结合粒子动画 二、分析 利用创建3点来构成贝塞尔曲线&#xff0c;形成线段利用着色器材质来按照线段以及时间…

Go语言学习:第1天

一、为什么开始学go语言 我自己是做测试的&#xff0c;所测试项目使用的是go语言。开始学习go语言的原因有两个&#xff1a;一方面&#xff0c;为了更好的做好工作&#xff1b; 另一方面&#xff0c;为了提高自己的核心竞争力。 二、第1天学习到的内容 2.1 Go是怎么解决包依…

ospf 知识总结

ospf 知识总结 一、ospf的概念 - 开放式最短路径优先协议&#xff0c;是广泛使用的一种动态路由协议&#xff0c;它属于链路状态路由协议&#xff0c;是一个内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在单一自治系统&#xff08;AS&#xff09;内决策路由。 - …

DeepMind大型语言AI模型FunSearch在数学科学中取得新发现

大型语言模型 (LLM) 是有用的助手 – 它们擅长组合概念&#xff0c;并且可以阅读、编写和编码来帮助人们解决问题。但他们能发现全新的知识吗&#xff1f;由于法学硕士已被证明会“幻觉”事实上不正确的信息&#xff0c;因此利用它们来做出可验证的正确发现是一个挑战。 FunSea…

HarmonyOS:使用MindSpore Lite引擎进行模型推理

场景介绍 MindSpore Lite 是一款 AI 引擎&#xff0c;它提供了面向不同硬件设备 AI 模型推理的功能&#xff0c;目前已经在图像分类、目标识别、人脸识别、文字识别等应用中广泛使用。 本文介绍使用 MindSpore Lite 推理引擎进行模型推理的通用开发流程。 基本概念 在进行开…

各技术栈需要掌握的知识

一、前端工程师需要掌握的知识 前端工程师需要掌握的知识主要包括以下几个方面: HTML、CSS和JavaScript:这是前端工程师的基础知识,需要熟练掌握。HTML是网页的骨架,CSS是网页的外观和样式,JavaScript则是实现网页交互效果的关键。响应式设计:随着移动设备的普及,响应…

测试用例设计方法之判定表详解!!

理论部分 判定表是分析和表达多种输入条件下系统执行不同动作的工具&#xff0c;它可以把复杂的逻辑关系和多种 条件组合的情况表达得既具体又明确。 条件桩(Condition Stub)动作桩(Action Stub&#xff09;条件项(Condition Entry&#xff09;动作项(Action Entry&#xff0…

Linux(4)-LAMP

L-LinuxA-apache/nginxM-mysqlp-php 搭建LAMP以及使用discuz搭建论坛网站 安装apache yum install httpd -y // 安装service httpd start // 启动Apache通过netstat -tunlp查看apache运行的端口&#xff0c;然后打开虚拟机ip 80端口能看到以下页面 或者 安装Mysql centOS6…

自然数分解 C语言xdoj64

输入说明 一个正整数 n&#xff0c;0<n<30 输出说明 输出n个连续奇数&#xff0c;数据之间用空格隔开&#xff0c;并换行 输入样例 4 输出样例 13 15 17 19 int main() {int n;scanf("%d",&n);if(n % 2 0){//n为偶数int in;//打印数字个数&#xff0c;做循…

【WINCC制作水管水流动画】

&#xff37;&#xff29;&#xff2e;&#xff23;&#xff23;简单制作水管水流动画 详情如下图所示&#xff1a; 1.首先用布化好管道&#xff0c;同时在管道内部画好折线图用以表示水流路径 2.选中折线图调整全局颜色方案 3.选择线条颜色 4.调整线条的线宽和线型 5.效果…

设计模式——组合模式(结构型)

引言 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们。 问题 如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 例如&#xff0c; 你有两类对象&#xff1a; ​…

关于Linux你必须知道的五件事

Linux是一种开源操作系统 (OS)。操作系统是直接管理系统硬件和资源&#xff08;如 CPU、内存和存储&#xff09;的软件。操作系统位于应用程序和硬件之间&#xff0c;并在所有软件和执行工作的物理资源之间建立连接。 俄罗斯军方计划用 Astra Linux 取代 Windows&#xff01;为…

JavaScript值类型和引用类型两道经典面试题

JavaScript值类型和引用类型两道经典面试题 题目1题目2 题目1 首先&#xff0c;小试牛刀&#xff0c;请看第一道题。 let a {x: 10 } let b a a.x 20 console.log(b.x)a {x: 30 } console.log(b.x) a.x 40 console.log(b.x);那么上述代码输出结果是多少呢&#xff1f; …

【Spring教程30】Spring框架实战:从零开始学习SpringMVC 之 Rest风格简介与RESTful入门案例

目录 1 REST简介2 RESTful入门案例2.1 环境准备2.2 思路分析2.3 修改RESTful风格 3 知识点总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安…

Flink-水位线和时间语义

Flink中的时间含义 在实际应用中&#xff0c;事件时间语义会更为常见。一般情况下&#xff0c;业务日志数据中都会记录数据生成的时间戳&#xff08;timestamp&#xff09;&#xff0c;它就可以作为事件时间的判断基础。 在Flink中&#xff0c;由于处理时间比较简单&#xff0c…

中文编程工具下载,编程工具构件之复选框构件

一、前言 零基础自学编程&#xff0c;中文编程工具下载&#xff0c;中文编程工具构件之扩展系统菜单构件教程 编程系统化教程链接https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&a…

GPM降水数据下载-Linux系统上使用wget

Linux 上如何下载GPM降水数据 图片来自&#xff1a;https://disc.gsfc.nasa.gov/datasets/GPM_3IMERGHHL_06/summary?keywordsGPM 这里以GPM30min降水数据为例&#xff0c; GPM下载链接 如果进不去&#xff0c;可能需要在这个网址上先注册个账户&#xff0c;这里不做介绍。 …

汽车租赁小程序源码租车小程序

汽车租赁小程序&#xff0c;多门店租车小程序&#xff0c;本套系统分为用户端&#xff0c;门店管理端&#xff0c;总管理后台三部分。门店可以加盟入驻平台。可以源码&#xff0c;也可以二次开发&#xff0c;也可以定制开发。php开发语言&#xff0c;前端是uniapp。用户端是小程…