【MySQL】想不想知道数据库到底是啥?想了就进来看看

news2025/4/8 9:00:27

数据库是什么

  • 前言
  • 正式开始
    • 连接mysql
    • 理解mysql
      • 第一层理解
      • 第二层理解
      • 第三层理解
    • 小问题
    • 见见猪跑
      • show databases;
      • create database xxx;
      • create table xxx;
    • 主流数据库
    • mysql架构
    • SQL语句的种类
    • 存储引擎

在这里插入图片描述

前言

你手上有没有MySQL?有了最好,没有的话建议下一个,如果你操作系统正好也是centos且没有下载的话,巧了,我上一篇刚讲了怎么下载:【MySQL】手把手教你centos7下载MySQL

正式开始

连接mysql

先不说啥,连接上MySQL的服务器:
在这里插入图片描述

可能你之前登录的时候没有用过这么长的选项,学过网络的同学应该看着127.0.0.1很眼熟,没学过网络的同学也没关系,好了,废话不多说。

mysql实际上是一个网络服务,因为当前是单机式访问的(下载mysq不光是一个mysql客户端,还有一个mysqld服务端),所以直接用本地回环的127.0.0.1。

-大写P是指你要访问的进程的端口号,我前一篇中配置文件中将服务器的端口号设置成3306了,所以这里想要手动知名端口号的话就是3306。

-u是指你想以什么身份登录,我这里是用root(mysql的root,不是Linux系统中的root)身份登录的,这里涉及到一点用户管理的知识,不讲的那么细了,后面会专门出一篇用户管理的博客的。

-p是登录的时候要输密码,因为我前一篇中设置配置文件的时候搞了登录不需要密码,所以这里我要不要这个选项都行,不加这个-p选项是能直接登录的:
在这里插入图片描述

因为前面一片本来就设置了配置文件了,所以连接的时候如果不指明-h,就会默认连接本地服务器上搭建的mysqld,-大写P去掉也是用配置文件中的3306,配置文件中可以改这个端口号,只要改了配置文件中的端口,后面访问的时候就要用修改后的端口。后面博客中也会讲mysq是可以跨网络服务的,当然跨网络就需要IP和端口了,这里用的是本地的,所以暂时不需要考虑。

简单总结一下:
-h为指明登录部署了mysql服务的主机的IP

-大P指明要访问的进程的端口号

-u指明用户类型,因为我还没有讲用户管理的博客,所以这里就暂时用root

-p也是,等讲了用户管理再说密码的事,目前先免密码登录,等到后面了必须设置密码,直的注意一点,密码输入的时候是不回显的,和Linux一样

理解mysql

第一层理解

我们下载的mysql,有两个东西非常重要,一个mysql,一个mysqld:
在这里插入图片描述

mysql相当于是客户端,而mysqld就相当于是服务端。

所以mysql其实是一种网络服务。

一般而言,以d结尾都是以守护进程的方式在后台运行的(我前面讲网络的时候也说过的,不懂且想了解的同学看这篇:【网络】用代码讲解协议 + 序列化和反序列化 + 守护进程 + jsoncpp)。

所以mysql本质其实是基于CS(client(mysql)-server(mysqld))模式的一种网络服务。

用netstat查看一下你起机器上的mysqld:
在这里插入图片描述

第二层理解

mysql是网络服务,那它提供的是什么服务呢?像抖音给我们提供的是短视频服务,mysql干啥了?
mysql是一套给我们提供数据存储服务的网络程序。

第三层理解

一般我们口语上说的数据库指的是在磁盘或者内存中存储的特定结构/组织的数据。这一点等会就体现出来了,不要急。说白话就是在磁盘上存储的一套数据库方案。

比如说在/val/lib/mysql路径下的某些文件:
在这里插入图片描述
这里先不说那么深。

后面为了方便各位理解,我说到数据库的时候指的是存放在磁盘上的那些文件,说数据库服务的时候是指mysqld,说数据库客户端的时候是mysql。

小问题

存储数据用文件不就行了吗?为什么还要用数据库呢?
一般的文件确实提供了数据的存储能力,但是从我们用户的角度来看,文件并没有提供非常好的数据内容管理能力。

什么叫数据内容管理能力呢?

比如说一个文件中有10万行内容,每行都是IP地址,我想让你统计一下其中以110开头的IP有多少个,以及各自是什么,这样的话,一个普通人数不得数晕过去了。

不过好在你还是一个程序员,可以通过文件读写操作来简单实现一下,但是还是要你手动写代码,比如按行读取,边度变统计判断,所以分析的过程还是要程序员自己去做。文件没有提供这样的能力,只提供了基本的读写能力,没有对内容做管理,这样如果再想要你将其中110开头的改成120呢?想让你把110开头的全部删除呢?

这种想要修改、查询、增加等对内容做操作都要程序员自己来做,不大方便。

所以这就是没有提供很好的数据管理能力。

换你,你愿意写这样的代码吗?
反正我不愿意,所以数据库本质上就是对数据内容存储的一套解决方案,用户给数据库某些字段或要求,数据库直接返回用户想要的结果就行了。

比如你给数据库说:你可以帮我把以110开头的IP给我挑出来吗?
数据库说:行,这就给你。
然后数据库帮你做这些工作,做完之后就把结果返回给你。

整个流程就是这样:
在这里插入图片描述

这样就不需要我们程序员自己去写这些代码了,这就是数据库存在的意义。

且文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

所以什么是数据库呢?
局部来看,数据库就是给我们提供数据存储能力的文件,文件中有特定格式,可以让mysqld服务进程对其直接进行增删查改,而不是让我们程序员直接用系统级别的文件操作进行读取,太麻烦了。

整体来看,上面的整套流程就是数据库,是一套数据存储的解决方案。

数据库一般是在磁盘上存着的,但也有内存级别的数据库文件,后面博客讲的时候会遇到。

数据库的水平也是衡量一个程序员水平的重要指标之一,所以学好数据库也是很重要的。

见见猪跑

show databases;

先来简单认识一些sql语句,本篇主要是介绍一下数据库的基本概念,不会说很多的sql语句,我后面的博客再细讲这些。

首先,你可以先看看你都有啥数据库文件,用这条语句:

show databases; #记得加分号

在这里插入图片描述
我这里有这些,不重要,就是带你用一下这语句。

这些其实都是文件,文件肯定是要放在某些地方的,那么这些文件放在那里捏?
先看一下你的配置文件:/etc/my.cnf,用vim打开,其中有一个datadir字段:
在这里插入图片描述

数据库的文件就存放在这个路径下(进入这个路径要有权限),其实我前面已经演示过了。再来看一眼:
在这里插入图片描述

再来对比着看一下:
在这里插入图片描述

看见没,就是文件,不过都是目录文件。

create database xxx;

来创建一个数据库看看:
在这里插入图片描述
此时就是从mysql客户端向mysqld服务端下达了一个创建数据库的请求。

show一下:
在这里插入图片描述

再来看一下对应目录下的文件:
在这里插入图片描述

进入这个目录看看:
在这里插入图片描述

只有一个db.opt文件,就是跟数据库相关的,不用管。

那么就可以出结论了,create建议数据库,本质就是在Linux中创建一个目录。

create table xxx;

再来在刚刚创建的数据库中创建一张表,表是什么东西呢,根据名字就知道是一张表,反正就是存储数据的东西。像Excel一样。

建表之前需要选定数据库,就好比有很多目录,你想进入那一个目录做操作一样。

所以先:

use xxx;#xxx是数据库的名字

在这里插入图片描述

然后就可以建表了:
在这里插入图片描述
这里涉及到表的操作,我后面会有专门的博客再讲的,这里就先简单说一下上面的是什么意思:
在这里插入图片描述
其实就像Excel一样,一张表,表名字叫做student,然后第一列表示的是name,也就是学生的姓名;第二列表示的是age,也就是学生的年龄;第三列表示的是gender,也就是学生的性别。其实上面的写法也可以写在一行上,不过这样看起来更美观。

这里只是见一下猪跑,后面博客会详细讲的。

在数据库中建一张表,就相当于在对应目录下建一个文件:
在这里插入图片描述
可以看到新增了两个文件,先不要管这两个文件是啥,直到是帮我们建的两个文件就行。

故在数据库内建表,本质就是在Linux下创建对应的文件。可以看到这两个文件的大小,说明其中是有内容的,反正都是数据库服务器帮我们做的。

再来向表中插入一些数据:

insert into 表名字 (各个列名) values (各个列对应你想插入的数据)

如:
在这里插入图片描述

用下面这条语句来查看表中的所有内容:

select * from 表名字;

看:
在这里插入图片描述

是不是很像一个Excel表格。注意上面这张表只是逻辑存储,是想以什么样的方式呈现出来的表结构,实际存储在文件中的还是二进制。

上面这些工作都是mysql服务端帮我们做的,也就是mysqld,所以根据上面这些展示就可以知道,数据库本质也是文件,只不过这些文件并不是由我们程序员直接操作的,而是由数据库服务端帮我们做的。

好了,猪跑已经看的差不多了,更详细的等后面博客再说。下面讲点别的。

主流数据库

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

大部分公司都选择用的是mysql,mysql虽然开源,但是并不代表其能力不强,就像Linux虽是开源的一样,但非常强。

mysql架构

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

先看一下这张图:
在这里插入图片描述

其中最上层的Client Connectors:
在这里插入图片描述
在本篇中的体现就是命令行式的mysql,后续我也会用C++连接mysql,还有其他的图形化界面(比如Navicat)。

对于mysql服务端而言,整体的功能主要由三层构成。

第一层就是其中的Connection Pool,也就是连接池:
在这里插入图片描述

mysql也是网络服务,也要做好连接管理,还有权限确认的功能,所以连接管理,给用户建权以保证安全,都是在这一层做的。

第二层:
在这里插入图片描述

第二层主要是对sql语句做词法语法分析,必要的时候还会对语句做优化,然后交给第三层。

第三层:
在这里插入图片描述

匹配的是一个个的存储引擎,作用上很像驱动。

不同种类的存储引擎做不同的事情,不同的数据也是有种类差别的,有的是文档、二进制等,针对不同种类的数据,采用不同的处理方案,表现出的结果是不同的。

比如上面的MyISAM比较适合对大文本进行读取,InnoDB有很强的索引功能,可以进行快速查找。

再往下就属于文件相关的系统层了,所以说,上面所说的mysql服务的三层其实全部属于用户层,再os视角来看就属于用户进程,底层对文件进行读取的属于os。以网络的视角来看,这三层就属于应用层。

SQL语句的种类

有三类。

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构
    代表指令: create, drop, alter。
    ⇒ 都是一些建表、修改表结构、维护存储结构的相关语句。

  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作
    代表指令: insert,delete,update。
    DML中又单独分了一个DQL,数据查询语言,代表指令: select
    ⇒ 对表的内容进行操作的。

  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
    代表指令: grant(赋权),revoke(取消权限),commit, begin。
    ⇒ 权限、事务管理的语句。

存储引擎

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

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

可以用show engines; 来查看存储引擎有哪些:
在这里插入图片描述

我这还有一张图:
在这里插入图片描述

用的最多的就两个,InnoDB和MyISAM,80%都是InnoDB,我在搞配置文件时默认的就是InnoDB。

到此结束。。。

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

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

相关文章

Echarts多条折线图 y轴与实时值提示框数值不一致解决方法:

Echarts多条折线图 y轴与实时值提示框数值不一致解决方法: 删除stack属性即可 stack看官网就是数据堆叠 发现这个bug,特此记录

【虹科干货】TWAMP:什么是双向主动测量协议?

TWAMP(双向主动测量协议)是什么?它在网络性能测量中有什么作用?如果您对IP网络中设备之间的性能问题感兴趣,或者想了解TWAMP与OWAMP之间的区别,以及TWAMP测试的好处。 一、TWAMP是什么? TWAMP代…

GeoGebra:数学动画制作工具重磅来袭

【线性代数】线性代数可视化工具:manim manim是之前我跟大家分享的一个线性代数动画制作工具。 但我之前的描述有些许偏差,这里要更正一下,manim不仅限于制作线性代数动画,也可以制作数学其他学科的动画,例如微积分&…

数据分析-numpy

numpy numpy numpy简介优点下载ndarray的属性输出数据类型routines 函数ndarray对象的读写操作ndarray的级联和切分级联切分 ndarray的基本运算广播机制(Broadcast)ndarry的聚合操作数组元素的操作numpy 数学函数numpy 查找和排序 写在最后面 简介 nump…

k8s的安装部署,详细过程展示(保姆级安装教程)

k8s应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定义资源使用…

PanNet: A deep network architecture for pan-sharpening(ICCV 2017)

文章目录 AbstractIntroduction过去方法存在的问题我们提出新的解决方法Related work PanNet: A deep network for pan-sharpening(PanNet:用于泛锐化的深度网络)Background and motivationPanNet architectureSpectral preservationStructural preserva…

网络原理---拿捏HTTP协议:请求和响应

文章目录 认识请求首行URLURL的格式URL的encode和decode 版本号方法GET方法POST方法GET VS POST 请求头:headerHostContent-Length 和 Content-TypeUser-Agent(UA)RefererCookie 空行正文:body如何构造HTTP请求?浏览器…

浙大恩特客户资源管理系统任意文件上传漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中fileupload.jsp接口处存在文件上传漏洞,未经身份认…

rv1126-rv1109-添加分区,定制固件,开机挂载功能

===================================================================== 修改分区: 这里是分区的txt文件选择; 这里是分区的划分,我这里回车了,方便看 FIRMWARE_VER: 8.1 MACHINE_MODEL: RV1126 MACHINE_ID: 007 MANUFACTURER: RV1126 MAGIC: 0x5041524B ATAG: 0x00200…

Ubuntu18.04.6共享文件夹的创建,以及在哪打开共享文件夹

目录 1、打开虚拟机的设置页面 2、设置共享文件夹 3、确认是否成功设置共享文件夹 4、完成后在进入到/mnt/hgfs ls查看,发现共享文件夹已经出现可以使用 1、打开虚拟机的设置页面 两种方式: (1)直接点击“编辑虚拟机设置” …

android自定义switch颜色

效果图&#xff1a; 原生样式和自己app的主题颜色不搭配&#xff0c;就可以这样自定义颜色样式。以下代码均可直接复制粘贴使用&#xff0c;且均有注释。 实现&#xff1a; 1、 新建drawable/switch_custom_thumb_on.xml&#xff08;滑块开启状态 &#xff09; <?xml ve…

DDD系列 - 第2讲 从贫血模型、事务脚本到面向对象(富血模型)、DDD领域模型的跨越

目录 一、灵魂拷问二、CRUD Boy现状三、贫血模型四、事务脚本五、从贫血模型演变到面向对象&#xff08;富血模型&#xff09;六、借助DDD领域模型摆脱事务脚本七、更多 一、灵魂拷问 Java作为面向对象的编程语言&#xff0c;使用Java编程的你面向对象了吗&#xff1f; 二、C…

“三位一体”超级混沌工程主要特点及功能

“三位一体”超级混沌工程X-Chaos主要包括基础故障编排、业务场景故障编排、演练场景编排、故障库管理、演练场景管理、演练计划管理、演练观测和演练报告等模块&#xff0c;支持对传统架构、云环境以及国产化基础环境的IT系统进行故障演练。本文将介绍混沌工程主要特点及主要功…

剪贴板劫持--PasteJacker的使用

启动 PasteJacker [1] Windows [2] Linux [3] Exit第一次是让我们选择要攻击针对的目标系统&#xff0c;这里以Windows系统为例&#xff0c;即我自己的物理机 因此键入 1 &#xff0c;回车 [1] Download and execute a msfvenom backdoor using certutil (Web delivery Past…

现在就是成为“新程序员”的黄金时刻!

整理 | 王启隆 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; “自然语言代替了编程语言&#xff0c;大大地降低了程序员的门槛。现在&#xff0c;ChatGPT 将全球的知识库和代码都放在了你的手中&#xff0c;只要有想象力&#xff0c;人人都能成为「新程序员」…

一周成功拿下4个offer的软件测试面试题,面试必看系列

前言&#xff1a; 压到就是赚到&#xff0c;面试通过的机率就更大&#xff0c;干就完了铁子 【文章末尾给大家留下了大量的福利】 ​编辑 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平…

腾讯云2023年双11活动:云服务器1.8折起,还可领取9999元代金券!

2023年双11腾讯云推出了11.11云上盛惠大促活动&#xff0c;包括秒杀专区、服务器买赠、新人专区、代金券专区、境外优选、新老同享、续费专区以及热门上云场景等满足新用户、老用户、企业用户对云计算服务的各种需求。 一、腾讯云双11活动地址 活动入口&#xff1a;点此直达 …

【高等数学】导数的应用

导数的应用 1、洛必达法则1.1、引例1.2、内容1.3、证明1.4、洛必达的应用总结 1.5、注意 2、泰勒公式2.1、解决的问题2.2、引例2.3、内容2.3.1、带Peano余项的泰勒公式2.3.2、带Lagrange余项的泰勒公式2.3.3、麦克劳林公式2.3.4、几个初等函数的麦克劳林公式 2.4、证明2.5、泰勒…

智慧城市建设解决方案分享【完整】

文章目录 第1章 前言第2章 智慧城市建设的背景2.1 智慧城市的发展现状2.2 智慧城市的发展趋势 第3章 智慧城市“十二五”规划要点3.1 国民经济和社会发展“十二五”规划要点3.2 “十二五”信息化发展规划要点 第4章 大数据&#xff1a;智慧城市的智慧引擎4.1 大数据技术—智慧城…

css实战——清除列表中最后一个元素的下边距

需求描述 常见于列表的排版&#xff0c;如文章列表、用户列表、商品列表等。 代码实现 <div class"listBox"><div class"itemBox">文章1</div><div class"itemBox">文章2</div><div class"itemBox"…