与MySQL的初相遇

🌎初识MySQL

:本文SQL语句只为了验证猜想,不会也不要紧。

文章目录:

MySql开端

认识数据库

什么是数据库

主流数据库

MySQL的本质

MySQL基础使用

连接mysql服务器

MySQL与文件的关系

服务器管理

服务器、数据库和表关系

MySQL架构

SQL语句分类


前言

MySQL是地表最受欢迎开源的数据库管理系统之一,也作为程序员水平的技术之一。今天我们就开始全新的话题!


🚀认识数据库

✈️什么是数据库

存储数据用文件就可以了,为什么还要弄个数据库?

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

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

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出 更加利于管理数据的东西------数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。


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

✈️MySQL的本质

MySQL事实上是一种网络服务,我们使用的是Linux下的mysql服务,在Linux下使用grep命令可以查看:

其中,mysql是数据库服务的客户端,mysqld是数据库服务的服务器端 ,而mysql的本质,基于 C(mysql) S(mysqld) 模式的一种网络服务

而mysql作为一种网络服务,在Linux下,我们就一定能使用如下命令来监测出mysql的网络服务:

bash 复制代码
netstat -lntp

话虽如此,但mysql可不仅仅是一套服务,它还是一套给用户提供数据存取服务的网络程序。可以在服务端对数据进行保存。

而我们口头所说的 "数据库"一般指的是,在磁盘或内存中存储存储特定结构组织的数据,也就是在磁盘上存储的一套数据库方案


🚀MySQL基础使用

✈️连接mysql服务器

不论在Linux下还是Windows下连接MySQL都需要先下载MySQL服务器。在MySQL中,我们使用如下命令连接MySQL:

bash 复制代码
mysql -P 3306 -h 127.0.0.1 -u root -p

其中各个选项的含义如下:

  • -P选项表示mysql端口号,通常为3306。不带此选项默认为3306端口
  • -h选项表示要连接mysql主机,本机为127.0.0.1。不带这个选项默认是本机连接
  • -u选项表示哪个用户登录mysql。
  • -p选项password,表示用户登录密码。
  • root用户表示以root的身份登录mysql。

当看到此页面时,就表示你已经登录MySQL成功了,进入到MySQL中想退出怎么办呢?输入 quit; 再回车即可退出MySQL:


✈️MySQL与文件的关系

首先,在MySQL中存在一个个的库,而我们想要查看这些库,可以使用如下SQL命令:

sql 复制代码
SHOW DATABASES;--大小写随意--

我们发现MySQL中默认存在四个库、那么这四个库存储在系统的哪个位置呢?通常在MySQL中/etc目录下的配置文件中查看:

bash 复制代码
cat /etc/mysql/mysql.conf.d/mysqld.cnf #很多不确定性因素,你的可能和我的配置文件不同

而在该文件下,一般都会保存一个名为 datadir 的目录,是用来保存SQL服务所对应的数据:

我们进入到所保存的目录,为了验证以上说法,我们首先创建一个数据库,使用如下SQL指令:

sql 复制代码
CREATE DATABASE helloMySQL;--创建名为helloMySQL的数据库--

我们发现确实如此,当然不仅如此,细心的小伙伴已经发现别的端倪了。而我们查看刚刚创建的这个目录:

我们发现这里什么都没有,当然你的可能会有 dp.opt 默认配置文件。所以由此我们可以得出结论:所谓建立数据库,本质就是在Linux下创建一个目录文件

而我们关系型数据库也得有表来展示,我们不妨使用如下SQL语句创建一张数据表:

sql 复制代码
USE helloMySQL;--使用具体的数据库--
CREATE TABLE student(
	id int,
	name varchar(32),
	gender varchar(2)
);

这样我们的表就创建成功了。而这个时候我们在Linux下对该目录进行查看时:

此时在该目录下就多了一个后缀为 .ibd 的文件了。创建完表当然要对表插入数据,我们使用如下的SQL语句对该表进行插入:

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

这样就插入成功了,我们使用如下SQL语句查看刚插入的表结构:

sql 复制代码
select * from student;

而我们输入这些SQL语句才完成了这样的工作,那么这个工作真的是我们完成的吗?实际上 这个工作是由mysqld来完成的!我们只是给它发了指令而已!他们的关系如下:


✈️服务器管理

如果你是 windows 下的MySQL用户,我们可以通过 win + r 并输入 services.msc 快速打开文件夹模式来 停用或者暂停 MySQL服务:


✈️服务器、数据库和表关系
  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据

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

准确来说,Client实际上是mysqlMySQL实际上是mysqld后面的内容俗称 "数据库",而各个表其实就是普通的文件,只不过表的文件是以二进制形式存储的。


🚀MySQL架构

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

虽然上面划分了四层结构,但是对于整体的MySQL Serve来说,主要功能由前三层来构成。

  • 链接池(Connection Pool)其作用是帮助用户做网络管理、帮助用户做鉴权和保证一些安全方面的策略

  • 中间层处理下达的一些SQL指令,而MySQL要对下达的SQL语句做词法分析、语法分析、甚至对SQL查询进行优化,随后按照SQL的协议将SQL传入下一层

  • 可插拔存储引擎(Pluggable Storage Engines)底层的存储引擎将上层经过处理的SQL语句,对其进行解释工作。访问指定数据库、访问指定文件、表结构等,对数据进行增删查改

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎,支持多种存储引擎。

我们可以使用如下SQL指令查看存储引擎:

sql 复制代码
SHOW ENGINES;

以下是一些存储引擎的对比:


🚀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

今天的内容到这里就结束啦,如果这篇文章对您有帮助的话,还望给点个小赞~~

相关推荐
鱼儿也有烦恼3 分钟前
MySQL最新安装、连接、卸载教程(Windows下)
mysql·navicat
IT运维爱好者16 分钟前
Ubuntu 22.04.4操作系统初始化详细配置
linux·运维·服务器·ubuntu
樂50226 分钟前
关于 Web 服务器的五个案例
linux·服务器·经验分享
Databend1 小时前
大数据是不是凉了?
数据库
学也不会1 小时前
雪花算法
java·数据库·oracle
H1346948901 小时前
服务器异地备份,服务器异地备份有哪些方法?
运维·服务器
SQingL2 小时前
解决SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption faile的问题
服务器·网络协议·ssl
瀚高PG实验室2 小时前
数据库未正常关闭后,再次启动时只有主进程,数据库日志无输出
数据库
Lonwayne2 小时前
Web服务器技术选型指南:主流方案、核心对比与策略选择
运维·服务器·前端·程序那些事
法迪2 小时前
Linux电源管理(2)_常规的电源管理的基本概念和软件架构
linux·运维·服务器·功耗