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

数据库是什么

  • 前言
  • 正式开始
    • 连接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。

到此结束。。。

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

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

相关文章

2022美亚杯团队赛

2022美亚杯团体赛 - XDforensics-Wiki 2022 美亚杯 团体赛AGC部分资格赛服务器部分 所有服务器部分解题思路_2022美亚杯团体赛复盘-CSDN博客 目录 AGC 1 2 Media Sever挂载 3 ssh登入的看法 PTS 4 5 ssh日志 6 7 查看docker列表 8 查看docker运行 9 建立网站…

solidworks对电脑要求高吗?2023solidworks配置要求

solidworks对电脑要求高吗?SolidWorks是一款功能强大的三维CAD软件,对电脑配置有一定的要求。一般来说,运行SolidWorks需要的电脑配置包括较高的处理器性能、足够的内存和存储空间,以及一块性能良好的显卡。此外,对于大…

Leetcode_3:无重复字符的最长子串

题目描述: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s "bbbbb"…

记一次上位机软件线程泄露的分析及解决

上位机软件在客户现场隔一段时间说操作了没反应,但是上位机又没死,出现了一些奇怪现象: 左上角的时间不走了(本来是1s运行一次)使用任务管理器查看,内存占用1.5G,线程有3000多个,正常情况下&am…

将 ONLYOFFICE 文档编辑器与 С# 群件平台集成

在本文中,我们会向您展示 ONLYOFFICE 文档编辑器与其自有的协作平台集成。 ONLYOFFICE 是一款开源办公套件,包括文本文档、电子表格和演示文稿编辑器。这款套件支持用户通过文档编辑组件扩展第三方 web 应用的功能,可直接在应用的界面中使用。…

VMware ifconfig ip报错解决记录

1.报错 ifconfig后出现以下报错 lo: flags73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 9216 b…

Element-Ui入门教学——<el-upload>限制上传文件类型

要限制<el-upload>上传文件的类型&#xff0c;需要给组件绑定:before-upload属性。 before-upload可选参数, 上传文件之前的钩子&#xff0c;参数为上传的文件&#xff0c;若返回 false 或者 Promise 则停止上传。HTML代码 <template><el-uploadclass"uplo…

竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

Simulia仿真之CST的使用指南(1) | 百世慧®

前言 CST是Computer Simulation Technology的缩写,是全球范围内众多工程师都喜欢使用的高端电磁仿真分析软件。 本文又名《智慧的CST生活》这里一共列出了120个章节&#xff0c;其中包括CST使用过程中的有用小技巧&#xff0c;还有给用户提供技术支持的过程中常见的问题。本专…

Linux服务器上搭建JupyterNotebook教程

搭建需知 1.确保是Linux服务器&#xff1b; 2.已经在linux服务器上安装好anaconda3&#xff1b; 搭建教程 请按照顺序依次执行下面的命令&#xff1a; 1、安装Jupyter Notebook 执行以下命令&#xff0c;安装jupyter notebook conda install jupyter【注】 如果anaconda3…

maven-compiler-plugin和spring-boot-maven-plugin的区别

两者都能打包&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 格式不同&#xff01;&#xff01;&#xff01;用处不同&#xff01;&#xff01;&#xff01; 以实验为准&#xff0c;下面开始实验&#xff1a; maven-compiler-plugin &…

双11狂欢最后一天

大家好&#xff0c;本年度双11即将到来&#xff0c;为了答谢大家多年来的支持及更广泛的推广VBA的应用&#xff0c;“VBA语言専功”在此期间推出巨大优惠&#xff1a;此期间打包购买VBA技术资料实行半价优惠。 1&#xff1a;面向对象&#xff1a;学员及非学员 2&#xff1a;打…

Android发热监控实践

一、背景 相信移动端高度普及的现在&#xff0c;大家或多或少都会存在电量焦虑&#xff0c;拥有过手机发热发烫的糟糕体验。而发热问题是一个长时间、多场景的指标存在&#xff0c;且涉及到端侧应用层、手机 ROM 厂商系统、外界环境等多方面的影响。如何有效衡量发热场景、定位…

NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

C#动态拦截并覆盖第三方进程的函数,实现函数篡改(外挂)

今天在看之前收藏的一个pdf文档(介绍C#外挂的相关知识的)&#xff0c;结合网上的东西及个人的理解才有了这篇文章。 参考文章&#xff1a; 【精选】一文带解读C# 动态拦截覆盖第三方进程中的函数&#xff08;外挂必备&#xff09;_zls365365的博客-CSDN博客 DotNetDetour - …

UE5数字孪生制作-数据篇(二) - 数据处理

1.卫星图与DEM高度图坐标一致处理 https://www.bilibili.com/video/BV1op4y1V71r?p4&vd_source707ec8983cc32e6e065d5496a7f79ee6 坐标系的调整 先把工程默认坐标调整下&#xff0c;建议调整到3857&#xff0c;在菜单的设置&#xff08;s&#xff09;里找到&#xff0c;修…

java excel、word、PPT转换成pdf预览

先引入包&#xff1a;[lib下载地址](https://mp.csdn.net/mp_download/manage/download/UpDetailed)Controllerpublic AjaxResult fileToPdf(RequestBody VerifyCode url, HttpServletResponse response, HttpServletRequest request) throws IOException {String fileUrl req…

Jupyter Notebook 内核似乎挂掉了,它很快将自动重启

报错原因&#xff1a; OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade perfo…

户外台灯设计:照亮你的户外空间

在一个温暖的夏夜&#xff0c;能够在户外享受美味的晚餐是一种特殊的愉悦。这种露天用餐的体验不仅让你感受大自然的美丽&#xff0c;还提供了独特的放松感。为了让这个时刻更加难忘&#xff0c;户外台灯的用途与设计至关重要。 户外台灯能够创造出温馨的氛围&#xff0c;为用餐…

第六章 :Spring Boot web开发常用注解(一)

第六章 &#xff1a;Spring Boot web开发常用注解&#xff08;一&#xff09; 前言 本章节知识重点&#xff1a;作者结合自身开发经验&#xff0c;以及觉察到的一个现象&#xff1a;Springboot注解全面理解和掌握的并不多&#xff0c;对注解进行了全面总结&#xff0c;共分两个…