【MySQL】MySQL数据库基础

MySQL数据库基础

  • 一、为什么要有数据库?
  • 二、 数据库软件的构成
    • 数据库服务器,数据库,表关系
    • 主流数据库
  • 三、基本使用
    • 1、连接服务器
    • 2、服务器管理
    • 3、MySQL配置文件
    • 4、数据库的简单操作
    • 5、数据逻辑存储
  • 四、MySQL架构
    • SQL分类
    • MySQL客户端
    • 存储引擎


数据库:是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

一、为什么要有数据库?

一般来说存储数据用文件就可以了,为什么还要专门搞一个数据库来存储数据呢?

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

  • 文件不利于数据查询和管理,例如我们要在一个大的IP文件中查找IP地址为127开头的所有IP地址,那么我们只能使用一些系统调用加上一些编程语言进行边读取边分析,最后得到结果,通过这我们会发现,我们对于文件的数据的查询和管理是比较麻烦的。

  • 安全性问题:数据如果误操作后无法进行回滚。

  • 不利于存储海量数据:文件中数据量越大,用户操控数据的成本越高。

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。

二、 数据库软件的构成

  • 数据库软件一般都是使用:客户端/服务器模式
    以MySQL数据库为例,当我们安装好MySQL软件并启动了服务端以后,我们可以在命令行中使用:
ps -axj | head -1 && ps -axj | grep mysql | grep -v grep

我们可以看到有一个mysqld的进程,这个d代表其是守护进程。这个就是mysql的服务端,我们需要使用我们的客户端mysql(不带d)连接mysqld然后才能够管理我们的数据。

在这里插入图片描述

mysqld本质是一个网络服务器,我们使用mysql命令连接MySQL服务端时,本质就是MySQL客户端在向MySQL服务端发起连接请求,连接建立成功后MySQL客户端就会将用户输入的SQL语句发送给MySQL服务端,之后MySQL服务端就会根据SQL语句对数据进行对应的操作。

我们可以使用下面的命令,来查看我们的mysqld的网络相关信息,可以看到mysqld数据服务默认采用3306端口号提供服务。

netstat -nltp 

在这里插入图片描述

数据库的存储介质有以下两种:

  • 磁盘,比如MySQL就是一种磁盘数据库。
  • 内存,比如redis就是一种内存数据库。

数据库服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

在这里插入图片描述

主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,适用于中大型项目。

  • Oracle: 甲骨文公司的产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。

  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。

  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。

  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

三、基本使用

1、连接服务器

在这里插入图片描述
解释说明:

  • h: 表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本主机。
  • P: 表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。
  • u: 表示用哪一个用户连接MySQL服务器,root表示超级用户。
  • p: 表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。

此外,如果要连接的是本地的MySQL服务器,那么连接时只需要指明用户名和用户密码即可。如下:

mysql -u 用户名 -p

连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,当要退出mysql时直接输入quitexit\q即可。如下:

在这里插入图片描述

2、服务器管理

  • 停止服务器

通过systemctl stop mysqld命令或service mysqld stop命令可以停止MySQL服务器。比如:

在这里插入图片描述

  • 启动服务器

通过systemctl start mysqld命令或service mysqld start命令可以启动MySQL服务器。比如:

在这里插入图片描述

  • 重启服务器

通过systemctl restart mysqld命令或service mysqld restart命令可以重启MySQL服务器。这里没有实验效果,不再演示。

3、MySQL配置文件

一般来说MySQL配置文件的绝对路径为/etc/my.cnf,打开这个文件

vim /etc/my.cnf

这里面的内容我们的可能不太一样,没有太大的关系。

在这里插入图片描述

配置文件中datadir对应的值为/var/lib/mysql,将来MySQL创建的数据库文件都会存储在该目录下,我们可以转到对应的路径下看一看里面的内容。

cd /var/lib/mysql
sudo ll

可以看到,里面有一些相关文件,也有一些文件夹,这里的一个文件夹就是一个数据库。

在这里插入图片描述

4、数据库的简单操作

这里我们只是为了见一见数据库的相关操作,关于细节的语法规则我们后面的文章进行讲述。

  • 查看数据库

连接MySQL服务器后,我们可以通过show语句来查看数据库,比如下面的语句来查看mysql的存储目录下的数据库(注意要加;代表结束):

show databases;

在这里插入图片描述

可以看到当前目录下有四个数据库,忽略掉information_schema,我们发现,剩下的三个数据库就是上面/var/lib/mysql下的文件夹。

  • 创建数据库

通过create语句创建一个名为db1的数据库,如下:

create database db1;

在这里插入图片描述

这时/var/lib/mysql目录下,就会多出一个名为db1的目录。如下:

在这里插入图片描述

查看db1目录下的文件,发现只有一个名为的db.opt的文件,该文件中指明了当前数据库的「默认字符编码」和「字符校验规则」(继承自我们的配置文件)。

在这里插入图片描述

因此我们创建数据库时,本质就是在MySQL的数据存储路径下新建了一个目录。

  • 删除数据库

通过drop语句删除一个名为db1的数据库,如下:

drop database db1;

在这里插入图片描述

此时在MySQL的数据存储路径下的db1目录也就不存在了,因此删除数据库本质就是删除数据存储路径下对应的目录。

在这里插入图片描述

  • 使用数据库

通过use语句使用一个名为db1的数据库,如下:

use db1;

在这里插入图片描述

使用数据库可以理解成,就是使用cd命令进入到该数据库对应的目录当中。

  • 创建数据库表

这里我们通过create语句创建一个简单的student表。比如:

create table if not exists student (id int, name varchar(20), gender varchar(2));

在这里插入图片描述

  • 查看创建的表时输入的命令

通过show语句可以查看创建的student表时输入的命令(显示的结果与你输入的命令不一定完全一致,因为mysql内部也要进行对命令进行优化)。比如(\G表示格式化输出):

show create table student \G

在这里插入图片描述

这时我们在去查看db1目录下的文件,发现多了两个文件分别是student.frmstudent.ibd,这时由于student表采用的存储引擎是InnoDB,如果是其他引擎,可能产生的是其他文件。

在这里插入图片描述

其中student.frm是表结构文件,student.ibd是表数据和索引的文件。

如果说创建数据库的本质是在数据存储路径下新建一个目录的话,那么创建表本质实际就是在特定的数据库目录下新建若干个文件(InnoDB存储引擎对应的是两个,MyISAM存储引擎对应的是三个),因此在创建表之前一定要先选择一个数据库。

  • 查看对应的表结构

通过desc语句可以查看对应的表结构。比如:

desc student;

在这里插入图片描述

  • 表中插入数据

通过insert语句可以向表中插入数据,比如:

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

在这里插入图片描述

  • 查询表中的数据

通过select语句可以查看表中的数据。比如:

select * from student;

在这里插入图片描述

5、数据逻辑存储

可以看出表中的数据是以二维表格的形式进行呈现的,包括行和列。如下:

在这里插入图片描述

其中每一行我们称之为是一条「记录」,而每一列都代表一个「属性」(属性列)。

四、MySQL架构

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

MySQL的架构设计如下:

在这里插入图片描述

  • 连接层 :与客户端打交道,上面已经写明了能支持的的语言。客户端的链接支持的协议很多,比如在 Java 开发中的 JDBC。

  • 服务层:在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL接口、SQL解析、SQL分析优化、缓存查询的处理以及部分内置函数执行等。各个存储引擎提供的功能都集中在这一层,如存储过程、触发器、试图等。

  • 服务层:由多种可拔插的存储引擎共同组成,真正负责MySQL中数据的存储和提取,每个存储引擎都有自己的优点和缺陷,服务层是通过存储引擎API来与它们交互的。

  • 存储层:将数据存储在裸设备的文件系统之上,完成存储引擎的交互。

站在操作系统角度:上三层都属于用户层,存储层是内核层

站在网络的角度:上三层都属于应用层,存储层属于传输层和网络层。

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

MySQL客户端

MySQL服务器会收到MySQL客户端发来的SQL语句,并根据SQL语句执行对应的操作。

  • 这里的MySQL客户端不仅仅指的是连接MySQL时使用的mysql命令,MySQL客户端还包括编程语言接口客户端。
  • MySQL给各种编程语言提供的用于访问数据库的接口,用户通过调用这些接口也可以向MySQL服务器发送SQL语句。

mysql命令本质是一个可执行程序,通过file命令可以看到该可执行程序是采用动态链接的方式生成的,通过ldd命令可以看到该可执行程序依赖的C/C++库文件。如下:

在这里插入图片描述

也就是说,mysql命令本身就是C/C++编写的,因此在编写mysql程序时,一定需要调用MySQL提供给C/C++的语言接口客户端。当然,MySQL不仅仅提供了C/C++对应的语言接口,像Python、Java、PHP等都有对应的MySQL接口。

存储引擎

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

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

  • 查看存储引擎

通过show语句可以查看MySQL支持的存储引擎。比如:

show engines;

在这里插入图片描述

其中MySQL底层默认使用的存储引擎是InnoDB,该存储引擎支持事务、行级锁、外键等。

存储引擎对比

建议记忆:InnoDB存储引擎是支持事务的,而MyISAM存储引擎是不支持的,其他的有需要再根据表进行查看就行了。

在这里插入图片描述

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

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

相关文章

smartkit巡检E9000设备

https://support.huawei.com/enterprise/zh/doc/EDOC1100325140/f6eeacd6 打开链接,里面的内容很详细。

013 OpenCV copyMakeBorder(padding)

目录 一、环境 二、原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、原理 cv.copyMakeBorder是OpenCV库中的一个函数,用于在图像周围添加边框(padding)。这个函数可以用于图…

C#中GDI+绘图应用(柱形图、折线图和饼形图)

目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形,其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图,是程序开发中比较常用的一种图表技术…

掌握Python异步IO利器:深入解读Asyncio

更多资料获取 📚 个人网站:ipengtao.com 异步 IO 与 Asyncio 在 Python 中的应用 在当今互联网时代,处理大量并发请求或I/O密集型任务对于软件应用程序至关重要。Python的异步IO框架——Asyncio成为了处理此类问题的有力工具。本文将深入介…

基于SpringBoot实现的电影院售票系统

一、 系统架构 前端:html | jquery | bootstrap 后端:springboot | thymeleaf | spring-data-jpa 环境:jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 首页 02. 登录页 03. 管理端-电影列表 04. 管理端-添加电影 05. 管…

京东数据分析:2023年10月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台10月份打印机市场销售数据已出炉! 10月份,打印机市场整体销售下滑。鲸参谋数据显示,今年10月份,京东平台打印机的销量将近60万,环比降低约2%,同比降低约5%;销售额为4.4亿&a…

模拟电路学习笔记(一)之芯片篇(持续更新)

模拟电路学习笔记(一)之芯片篇(持续更新) 1.CD4047BE芯片 CD4047是一种包含高电压的多谐振荡器,该器件的操作可以在两种模式下完成,分别是单稳态和非稳态。CD4047需要一个外部电阻器和电容器来决定单稳态…

开源项目CuteSqlite开发笔记(二):SQLite的架构

在开发CuteSqlite图形客户端的时候,需要用到SQL的语法解释,来对SQL语句进行优化。找了很多的SQL语法解释器,都不是十分满意,只有翻开Sqlite的源码,看看SQLite对SQL语句的解释过程,本文是翻译的官方文档。 官…

Twincat功能块使用经验总结

控制全局变量: //轴控制指令 bi_Power: BOOL; //使能 bi_Reset: BOOL; //复位 bi_Stop: BOOL; //停止 bi_JogForward: BOOL; //正向点动 bi_JogBackwards: BOOL; //反向点动 bi_MoveAdditive: BOOL; //增量位…

Anaconda创建虚拟环境以及Pycharm和Jupyter如何切换虚拟环境

文章目录 Anaconda创建管理虚拟环境0. 进入到终端1. 创建新环境2. 切换环境3. 删除环境4. 查询当前已有的环境 Pycharm切换虚拟环境0. 更换解析器1. 添加虚拟环境(之前默认的是base环境)2. 验证切换虚拟环境 Jupyter Notebook 切换虚拟环境1. 安装ipyker…

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查 上一次我们实现了多表关联查询,还有分页显示数据的功能。还完善了用户管理这一模块。 因此今天我们需要完成的是供应商管理模块,这一模块…

BFD多跳检测配置

定义 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响,提高网络的可靠性,网络设备需要…

指针进阶知识超详细讲解(C语言)(中)

前言 苦苦等待,终于迎来了我们的指针讲解第二期,如果有还没有看过上一期的小伙伴,那赶紧点击这个链接学习后再来看这篇博客吧。指针基础知识超详细讲解(C 语言)(上) 如果对学习C语言有兴趣那千万…

如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问

目录 前言 1. Ubuntu安装SVN服务 2. 修改配置文件 2.1 修改svnserve.conf文件 2.2 修改passwd文件 2.3 修改authz文件 3. 启动svn服务 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射本地端口 5. 测试公网访问 6. 配置固定公网TCP端口地址 6.1 保留一个固定…

GEE:Sobel算子卷积

作者:CSDN _养乐多_ 本文将深入探讨边缘检测中的一个经典算法,即Sobel算子卷积。我们将介绍该算法的基本原理,并演示如何在Google Earth Engine中应用Sobel算子进行图像卷积操作。并以试验区NDVI为例子,研究区真彩色影像、NDVI图…

【GIT】.gitignore 在忽略目录中放开某目录

示例:忽略build下面的所有目录,只放开build/ast2500-default/workspace/recipes-phosphor/ 目录 .gitignore 实现文件代码 # 忽略 build 目录下的所有目录 # 并放开build/ast2500-default/workspace/recipes-phosphor/ build/* !build/ast2500-defaul…

轮询分区的设置

终于可以写MPI了,没想到,刚开始就当头一棒,我按照之前的配置MPI环境,配置完成就报错 好家伙,仔细检查了每一个步骤都没找到问题,上网搜索了一些解决方案,也没有解决。所幸,在配置MPI…

关于前端学习的思考-vertical-align的用法

先摆结论:vertical-align这里的top线,bottom线,middle线,baseline线是由最大宽度和最大高度的行内元素或行内块元素决定的。 按照惯例,先摆三个行内元素。 1、改变第一个盒子,vertical-align:to…

主机装ubuntu双系统,无线网络问题

微星主板开机按del进入bios,setting里设置启动优先级 启动盘制作 350G 三个分区: 1.EFI系统分区,2G,逻辑分区,空间起始位置 2.Ext4,/,根目录,120G,主分区&#xff0c…

Java异常详解大全(2023版)

Java异常详解 异常分类1.Throwable2. Error(错误)3. Exception(异常)3.1 运行时异常 RuntimeException3.2 编译时异常(受检查异常)ClassNotFoundException + IOException4.常见的运行时异常5.异常如何处理Java 的异常处理是通过 5 个关键词来实现的:try、catch、throw、…