【Hello mysql】 数据库基础

Mysql专栏:@Mysql
本篇博客简介:简单的介绍mysql相关的一些基础知识和在Linux环境下的安装 让大家对于mysql有一个初步的认知

数据库基础

  • 数据库基础
    • 数据库定义
    • 数据库再理解
      • 软件角度
      • 文件角度
      • 总结
    • 主流数据库
    • mysql安装
      • 卸载不要的环境
      • 获取mysql官方yum源
      • 安装mysql
      • 登录mysql
      • mysql的一些配置
    • 连接mysql
    • 服务器 数据库 表关系
      • 数据库和表在Linux中的存在形式
      • 服务器 数据库 表关系
    • mysql使用案例
    • 数据的逻辑存储
    • mysql的架构
    • SQL分类
    • 存储引擎
      • 存储引擎
      • 查看存储引擎
      • 搜索引擎对比(了解即可)

数据库基础

数据库定义

我们可以在书上看到数据库的定义是

数据库是按照数据结构来组织、存储和管理数据的仓库

也就是说它其实是一个存储数据的软件

我们之前的博客写过一些项目 其中的一些项目也需要保存数据 比如 通讯录的文件版本 当时我们储存数据的方式主要是通过文件操作 当时也很顺利的完成了项目的功能 那么为什么我们不直接使用文件来保存数据 而是设计出了数据库呢

相对于数据库保存数据来说 文件保存数据存在着以下的缺点

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

数据库再理解

为了加深大家对于数据库的理解 下面我们分别从软件和文件两个角度来介绍下数据库

软件角度

在这里插入图片描述

一开始我们通过自己写的一些程序调用一些库函数(open write等)来直接进行文件操作 将数据保存到磁盘中

当我们要对于文件中的一些数据进行增删改查的时候需要自己去敲一些代码来实现这个功能 虽然这是可以实现的 但是会很麻烦 而且如果所有的软件都要自己实现这些功能的话就不可避免的出现很多重复冗余的代码

这个时候数据库的作用之一就体现出来了 它能让用户or用户程序更方便的进行数据管理
在这里插入图片描述
用户通过SQL语句来对数据库下达指令 然后数据库再分析这些SQL语句的含义再进行对应的文件操作

其中数据库就是在用户程序和磁盘文件中的一个软件 它是需要自己的访问磁盘中的文件的

  • 数据库也是用文件的方式来进行文件保存的
  • 数据库中直接和文件打交道的部分 我们一般叫做存储引擎

如何理解存储引擎

我们可以将存储引擎类比为搜索引擎来理解

在这里插入图片描述

本来用户程序想要搜索磁盘中的某一个数据的时候需要自己一个个的去查找

在这里插入图片描述

但是有了搜索引擎之后用户程序只需要将自己想要搜索的内容告诉它 搜索引擎就会给用户程序相应的反馈

存储引擎同理

文件角度

数据库其实就是一个网络服务器 它的组成可以分为下面三段

  • 数据库服务器
  • 数据库客户端
  • 数据库库+数据库表结构

假设在这样的一个学校中 老师是通过一个教务系统来管理学生的各种数据的

在这里插入图片描述

我们就可以将数据库的组成类比到图中

在这里插入图片描述
也就是说mysql其实是这样子的一个网络服务器结构

在这里插入图片描述
在学习网络部分的时候我们也见过这种结构 这其实就是一个CS模式的客户端服务器

CS模式

  • C client 客户端
  • S sever 服务器

在有了上面的知识之后我们再去回答下面的问题

如何理解安装mysql

安装mysql服务器的本质就是安装mysql的客户端和服务器

如何理解启动mysql

启动mysql本质就是启动mysqld服务器

如何理解连接mysql

连接mysql的时候我们也许会输入这样子的一串代码

mysql 127.0.0.1 3306

它的意思就是让mysql连接127.0.0.1ip(本地环回)的3306端口

当然mysql作为一个网络服务器也是可以进行跨网络通信的

总结

在经历上面两层角度对于数据库的理解之后我们可以做出下面的定义

**数据库是一款服务器软件 它的作用是帮我们维护数据 我们可以通过客户端向服务端发送SQL请求 之后服务端进行响应对于数据进行增删改查 **

网络角度: mysql在网络角度中属于哪一层的软件呢?

应用层

系统角度: mysql属于OS内置的软件还是需要下载的呢?

需要下载

主流数据库

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

这其中我们使用的最多就是MysqlOracle

mysql安装

卸载不要的环境

某些云服务器可能会自带一些数据库 比如说mariadb或者mysql等

为了保证接下来教学环境的同步 我们首先要先卸载这些自带的数据库并且安装一个同版本的数据库

首先我们查找下是否有mysql或者是mariadb的进程在运行
在这里插入图片描述
博主这里没有正在运行中的mysql进程 如果大家检查的时候遇到了需要先停止这些进程的运行 要使用到下面的指令

systemctl stop mariadb.service

接着我们检查下是否有这些软件的安装包的存在

在这里插入图片描述

检查之后我们就发现了mariadb安装包的存在

之后我们使用卸载程序进行卸载即可

rpm -qa | grep mariadb | xargs yum remove -y

xargs是什么

它是一个卸载程序 它会将管道中传递过来的内容以命令行参数的形式传递给yum remove

在这里插入图片描述

此时我们原先的环境就卸载完毕了

获取mysql官方yum源

怎么下

Mysql官方yum源地址

打开之后我们可以看到一个这样子的画面

在这里插入图片描述

这里有许多不同的mysql版本供我们下载 当然我们要结合自己的系统来进行下载安装

我们可以通过下面的指令来查看自己的系统版本

cat /etc/redhat-release

在这里插入图片描述
(centos 7.6)

而我们选择常用的mysql5.7版本 在网站中我们可以发现mysql5.7版本中并没有适配centos7.6版本的软件(el就代表的是centos)

所以说我们直接选择最后一个 适配所有centos7版本的mysql

在这里插入图片描述

下载完毕之后我们直接拷贝一份放到桌面上 接着使用rz指令来上传到我们的linux系统中

在这里插入图片描述

怎么安装

我们下载了安装包之后还需要更新yum源仓库

通过下面的指令我们可以查看更新之前的yum源

ls /etc/yum.repos.d/ -l

在这里插入图片描述

我们可以看到并没有mysql的yum源

接着可以通过下面的指令来更新mysql的yum源

rpm -ivh mysql57-community-release-el7.rpm 

在这里插入图片描述
更新之后再查看我们就会发现mysql出现再yum源仓库里面了

之后我们就能够使用yum来查看mysql的相关软件

在这里插入图片描述

安装mysql

安装mysql的过程十分简单 只需要一行指令就可以

yum install -y mysql-community-server

在这里插入图片描述

如果说安装过程中我们遇到了密钥过期的问题

Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

我们只需要使用下面的指令更新下密钥就可以了

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

如何确保我们的mysql安装成功?

在Linux下一切皆文件 我们可以通过which指令来查看系统中是否有mysql和mysqld相关的文件

在这里插入图片描述

注意图上的目录 我们可以发现mysqld是在sbin(super bin)目录下而mysql是在bin目录下

事实上像mysqld这种网络服务器一般都会在sbin目录下都需要较高的管理员权限才能开启

之后我们可以通过systemctl来启动mysqld服务器 启动完毕之后再查看进程就能够看见mysql了
在这里插入图片描述

我们在之间说过 mysql是一个网络服务器 所以说当我们启动mysqld服务器之后查看系统中的网络进程也能够查到mysql(它底层默认是tcp协议)

在这里插入图片描述

登录mysql

我们登录mysql的时候需要一个登录密码 可是在安装mysql的时候我们并没有设置这个密码

这个时候我们要先找到mysql 的配置文件 在配置文件中加上本次登录不需要密码的选项

mysql的配置路径一般是这个

/etc/my.cnf

接着我们使用vim编辑器编辑这个文件 在文件的最后一行加上如下的文字就可以了

skip-grant-tables

紧接着我们重启下mysql服务器就可以免密码登录了

登录的指令是

mysql -u root -p

其中u是user的意思 p是password的意思
在这里插入图片描述

mysql的一些配置

和上面设置跳过密码一样 我们通过

vim /etc/my.cnf

来修改mysql的配置文件

目前我们增加的配置主要有三个

在这里插入图片描述

分别是

  1. 默认绑定端口号3306
  2. 默认编码格式使用utf-8
  3. 默认搜索引擎使用innodb

连接mysql

连接mysql一般使用下面的指令

mysql -h 127.0.0.1 -P 3306 -u root -p // 注意第一个P要大写

在学习过网络部分之后我们很简单就能猜到上面四个参数的含义

  • -h host 主机号
  • -P port 端口号
  • -u user 用户
  • -p password 密码

如果我们不写-h的话默认就是本地环回

如果我们不写-P的话默认就是3306端口

在这里插入图片描述

最后我们使用quit指令退出mysql

服务器 数据库 表关系

数据库和表在Linux中的存在形式

我们之前在配置mysql服务器的时候发现里面有这样的一个字段

在这里插入图片描述
它的含义是我们所有的数据都保存在 /var/lib/mysql 这个路径当中

我们展示这个目录中的所有内容可以发现下面的场景
在这里插入图片描述
之后我们登录mysql 查看一下mysql的database
在这里插入图片描述

对比观察下这两张图我们不难发现 数据库中的database 在Linux服务器中都有一个对应的目录文件

也就是说创建数据库的本质就是在Linux服务器上创建一个目录 创建表的本质就是在Linux服务器上创建一个文件

服务器 数据库 表关系

  • 所谓安装数据库服务器 只是在机器上安装了一个数据库管理系统程序 这个管理程序可以管理多个数据库 一般开发人员会针对每一个应用创建一个数据库(db)
  • 为保存应用中实体的数据 一般会在数据库中创建多个表 以保存程序中实体的数据
  • 它们之间的关系如下图

在这里插入图片描述

mysql使用案例

创建数据库

create database helloworld;

在这里插入图片描述

使用数据库

use helloworld;

在这里插入图片描述

创建数据库表

create table student(id int,name varchar(32),gender varchar(2)
);

在这里插入图片描述

查看表结构

desc student;

在这里插入图片描述

插入数据

mysql> insert into student (id , name , gender) values (1, 'zhangsan', '1');

在这里插入图片描述

查看数据

select * from student;

在这里插入图片描述

数据的逻辑存储

在这里插入图片描述

我们通常喜欢把数据库中的一行叫做一条记录

把一列叫做属性

我们将这样的存储结构叫做mysql的逻辑存储

mysql的架构

下面是mysql的架构图

在这里插入图片描述

我们直接在图中介绍mysql各层的功能

在这里插入图片描述

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

SQL语言会分类的本质是因为使用者的需求不同

我们将mysql比作一个教务系统 在这个教务系统中 学生的需求可能是要做作业 上传作业(DML)

老师的需求可能是要布置作业(DDL)

校长的需求可能是要招聘或者开除老师或学生(DCL)

我们因为这些需求的不同将SQL语言分为了上面几类

存储引擎

存储引擎

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

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

查看存储引擎

使用 show engines 就可以查看mysql的存储引擎

在这里插入图片描述

搜索引擎对比(了解即可)

在这里插入图片描述

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

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

相关文章

java中预览pdf或者图片

GetMapping("preview1")ApiOperation(value "根据文件名实现预览功能")public void previewFile1( HttpServletResponse response) throws IOException {String filePath"C:\\Users\\Harbor Lau\\Desktop\\哈哈\\""11月燃油费(公开).pdf&q…

C# int[,] 和 int[,,]

如标题; 在C#中这两个是定义二维和三维数组的;这和C语言的写法不同; C语言定义二维数组是, int a[5][3]; 看下C#的多维数组;输出数组其中一个值; using System;class Program {static void Main(string[…

Django - 定时任务框架【django-apscheduler】基本使用详解(二)

一. 前言 一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板渲染功能完成页面…

学习Kotlin~类

类 类的field 类定义的每一个属性,kotlin都会产生一个filed,一个setter(),一个getter()field用来存储属性数据,不能直接定义,kotlin会封装,保护它里面数据,只暴露给getter和setter使用只有可变属性才有setter方法需要…

MQTT协议学习

前言 最近在学习mqtt协议,看的是官方英文版的,写这篇博客就是为了将一些关键内容提取出来,以便日后的查询和复习,有需要的可以参考。官方的文档在这: MQTT Essentials - All Core Concepts explained (hivemq.com) …

时间序列预测 | Matlab基于粒子群算法优化门控循环单元(PSO-GRU)的时间序列预测,PSO-GRU时间序列预测,单列数据集

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于粒子群算法优化门控循环单元(PSO-GRU)的时间序列预测,PSO-GRU时间序列预测,单列数据集。 优化参数为学习率,隐藏层节点个数,正则化参数,要求2020b及以上版本&#

Nacos架构与原理 - 通信通道

文章目录 Nacos 长链接⼀、现状背景二、场景分析1. 配置SDK 和 Server 之间Server 之间通信 2. 服务SDK 和 Server 之间Server 之间通信 三、长链接核心诉求1. 功能性诉求客户端服务端 2. 性能要求3. 负载均衡客户端随机服务端柔性调 4. 连接⽣命周期5. 安全性6. 低成本多语⾔实…

NSS [SWPUCTF 2021 新生赛]no_wakeup

NSS [SWPUCTF 2021 新生赛]no_wakeup 先看题目&#xff0c;反序列化&#xff0c;绕过weakup。 exp&#xff1a; <?php class HaHaHa{public $admin;public $passwd;public function __construct(){$this->admin "admin";$this->passwd "wllm";…

HttpRunner接口自动化测试框架详解

目录 简介 框架流程 核心特性 下载安装 入门使用 测试场景 用例设计 运行测试 查看测试报告 HttpRunnerManager 简介 核心特性 下载安装 环境配置 erlang Rabbitmq 总结&#xff1a; 简介 HttpRunner是一款面向 HTTP(S) 协议的通用测试框架&#xff0c;只需编…

JavaScript

目录 一、javaScript介绍 二、JavaScript使用 三、变量 四、关系比较运算 五、逻辑运算 五、数组 六、函数 1.函数的定义方式 2.函数的作用域 3.变量声明提前 4.this关键字 七、自定义对象 1.Object 对象 2.自定义对象 3.匿名函数 比较数据 八、js中的事件 1.事件定义 …

蘑菇车联用城市级落地讲述自动驾驶新故事

作者 | 魏启扬 来源 | 洞见新研社 “如果不能实现自动驾驶&#xff0c;特斯拉将一文不值”。 这是马斯克在接受媒体采访时的公开发言&#xff0c;这句话的语境是&#xff0c;特斯拉是自动驾驶坚实的拥护者&#xff0c;且一直在付诸行动。 可是特斯拉渐进式的单车智能路线&am…

CodeTop整理-数组篇

目录 53. 最大子序和 33. 搜索旋转排序数组 三数之和 121. 买卖股票的最佳时机 4. 寻找两个正序数组的中位数 695. 岛屿的最大面积 54. 螺旋矩阵 88. 合并两个有序数组 152. 乘积最大子数组 42. 接雨水 64. 最小路径和 1. 两数之和 123. 买卖股票的最佳时机 III …