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开发的嵌入式数据库 它本身只是一个类库 可以直接嵌入到应用项目中
这其中我们使用的最多就是Mysql和Oracle
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的配置文件
目前我们增加的配置主要有三个
分别是
- 默认绑定端口号3306
- 默认编码格式使用utf-8
- 默认搜索引擎使用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的存储引擎