<MySQL> 数据库基础

目录

一、数据库概念

         (一)什么是数据库

(二)数据库存储介质

(三)常见数据库

二、数据库基本操作

(一)连接数据库

(二)使用数据库

(三)服务器、数据库、表关系

三、MySQL语句分类

四、MySQL架构

五、存储引擎

(一)查看存储引擎

(二)存储引擎间的区别


一、数据库概念

(一)什么是数据库

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

我们可以直接把数据存放到文件中,这样也能保证数据长期存储,那为什么还要搞一个 数据库 呢?

因为一般的文件并没有提供很好的数据管理能力(站在我们用户角度),比如对于一个大小为几个 GB 的文档文件,如果我们想要快速的查找某个字段,就需要先读取文件信息,再进行遍历查找,效率是非常低的。

 文件存储的缺点:

  1. 安全性问题:数据容易被修改,可能造成误操作。
  2. 不利于数据查询与管理:数据直接存储,没有被高效组织。
  3. 不利于存储海量数据:数据量过大时,会导致文件体积膨胀。
  4. 在程序中不方便控制:读取文件中的数据需要借助文件流,操作繁琐。

但数据库就不一样了,具备简单、高效、可靠管理数据的特性,可以轻而易举的对数据进行操作;数据库由两部分组成:客户端 Client、服务器 Server,是一种 基于 CS 模式的网络服务,用户只需要使用 客户端 向 服务器 发出 SQL 语句,等待结果即可,这是非常方便的。

我们学习的 MySQL 就是这种工作模式,在安装完 MySQL 后,启动的 mysqld 就是它的 服务器,所谓的登录 MySQL 也就是登录 客户端:

mysqld  中的 d 表示单词 daemon,即 守护进程,这是一种特殊的进程,父进程为 1 号进程,即系统进程,无需依赖 bash 进程运行,而是直接运行在后台,这样它就能不断在后台运行

MySQL 是一套给我们 提供数据存储服务的网络程序,当我们说起 MySQL 时,应该想到:客户端、服务器、磁盘共同组成的服务体系:

(二)数据库存储介质

MySQL 数据库是将数据存储在 磁盘 中,称为 磁盘数据库;除此之外,还可以将数据存储在 内存 中,称为 内存数据库 / 主存数据库,比如 Redis 就是这种存储模式:

磁盘数据库 将数据存储在 磁盘 中,在 持久化保存 上有明显优势,但 IO 次数势必会增多,为了提高自己的存储效率,磁盘数据库拥有自己的缓存机制,即 高效 IO。

内存数据库 中的数据存储在 内存 中,最大的优点就是 数据读写非常快,可以大大提高操作效率;内存数据库 并非完全不使用磁盘,比如数据库的启动信息、初始数据就得存储在磁盘中,其他涉及操作的数据存储在 内存 中,直接进行运算,为了防止数据丢失,内存数据库 通常会定期将数据转存到磁盘中,确保持久化存储。

磁盘数据库和内存数据库都是数据库管理系统的存储方式,它们各自有自己的特点和适用场景。

(三)常见数据库

  • SQL Server: 微软的产品,深受 .Net 开发者的喜爱,适合中大型项目的开发。
  • Oracle:甲骨文公司推出的产品,适合大型项目,或者具有复杂逻辑的项目,其并发性能一般不如 MySQL。
  • MySQL由瑞典公司MySQL AB开发,是世界上最受欢迎的数据库,并发性能好,对简单的 SQL 处理效果好,适用于 电商、SNS、论坛 等项目开发,后被甲骨文公司收购。
  • PostgreSQL:起源于加州大学伯克利分校的计算机科学系,是一个独立的、开源的数据库管理系统,由全球的志愿者开发和维护,无论是私用、商用还是学术研究,都可以免费使用、修改和分发。
  • SQLite:由 Dwayne Richard Hipp 于 2000 年创建,是一种轻量级、嵌入式的关系型数据库,遵循 ACID原则(原子性、一致性、隔离性、持久性),并且它的占用资源非常低,仅需几百 KB,广泛用于移动应用、嵌入式系统、桌面应用、Web浏览器、游戏等各种应用程序中。
  • H2:一种由纯 Java 编写的轻量级的嵌入式关系型数据库管理系统,以嵌入式库的形式存在,适用于Java应用程序的内部嵌入,虽然它不适用于大规模或高并发的生产数据库,但对于小型项目和原型开发非常有用。

MySQL 风靡全球的重要原因之一就是 免费,深受广大开发者的喜爱。

二、数据库基本操作

(一)连接数据库

首先是连接数据库,可以这样操作:

注意: 连接数据库前需要确保 MySQL 服务已启动。

mysql -u 用户 -p -h IP地址 -P 端口

其中:

  • -u 后跟想要登录 MySQL 的用户名,比如 root
  • -p 表示使用密码登录,可以紧跟密码,也可以回车后输入
  • -h 表示 MySQL 服务部署机器的 IP 地址
  • -P 表示 MySQL 服务进程所使用的端口号

如果是直接在云服器中登录,可以不指定 -h 和 -P,并且我们当前只有一个 root 用户,只需这样操作即可连接数据库

mysql -u root -p

输入密码后,登录 MySQL,出现 mysql> 就表示登录成功了

(二)使用数据库

查看当前 MySQL 系统中有哪些数据库

mysql> show databases;

注:这四个数据库都属于系统数据库,不可删除。

创建一个名为 DataBase1 的数据库:

mysql> create database DataBase1;

创建成功:

在当前环境中,MySQL 运行所产生的数据都存储在 /var/lib/mysql 目录中,当我们新建一个数据库后,实际就是在 mysql 目录中新建了一个目录(文件夹)

注:

  • 查看此目录需要先退出 MySQL ,直接输入 quit 退出
  • 因为是系统级文件,需要借助 root 身份才能查看
ll /var/lib/mysql


使用数据库,MySQL 中会有很多数据库,在进行 建表、查询 等操作前,需要先指明使用哪一个数据库进行操作:

mysql> use DataBase1;

执行指令后,可以通过函数判断是否成功:

mysql> select database();

结果显示正常,证明当前正在使用 DataBase1 数据库:


创建一张表 T1,包含 序号、姓名 两个列属性:

mysql> create table T1
	  (
	    id int,
	    name varchar(32)
	  );

创建表后,可以查看表的详细信息,同时验证表是否已经创建成功了:

mysql> desc T1;

表结构中有很多属性,现在可以先不用管具体是什么意思,只需要知道当前存在一个 int 和 varchar 类型的字段就行了。

如果想进行清屏操作,可以使用 system clear 进行清屏:

mysql> system clear

创建表的本质也是在创建文件,同样可以去到之前的目录中,具体进入 DataBase1 目录,可以看到这个目录下确实多了两个名为 T1 的相关文件:

至于这两个文件具体是什么,得结合存储引擎来理解。


有了表结构后,可以向表中插入部分数据

注意: 插入的数据格式要与表的格式对应,不能向不存在的字段中插入数据。

现在直接进行全列插入,即插入 序号、姓名 两个信息:

mysql> insert into T1 values (1, '张三');

mysql> insert into T1 values (2, '李四');

mysql> insert into T1 values (3, '王五');

在 MySQL 中,执行指令后出现 Query OK 表示指令执行成功,如果出现其他提示信息,大概率是语法问题,检查 插入数据格式、标点符号 是否出现问题。


查询 T1 表中已经插入的数据

mysql> select * from T1;

可以看到数据已经成功插入 T1 表中了: 

创建数据库、创建表、插入数据、查询数据 已经覆盖绝大多数业务场景了,不过实际并没有这么简单,比如表结构需要慎重创建,符合 三大范式;查询数据时,需要配合各种筛选条件进行查询,如 where 子句、聚合条件、多表查询等;MySQL 中还提供了高效的数据管理机制,比如 索引、事务、权限管理,具体细节需要慢慢学习。

(三)服务器、数据库、表关系

不难发现,在使用 MySQL 中,执行结果总是以 行、列 形式呈现的,这是因为 行列构成表,而 MySQL中一切皆为表:

执行结果都是以 行  式呈现的,本质上就是一张表:

这种行列式结构最大的优点就是直观,便于我们快速查看数据信息:

  • 行:数据信息
  • 列:数据属性

与之前 MySQL 知识进行串联,可以得出结论:用户登录客户端,向服务器发出指令,创建数据库的本质是创建目录(文件夹),创建表的本质是在数据库中创建文件,插入数据就是往文件中写入数据,查询结果时是以行列式呈现的,表是 MySQL 中最常见、最常用的结构

一个数据库中不只存在一张表,SQL 指令执行结果也可以看作一张表。

三、MySQL语句分类

MySQL 中的语句可分为三类:

  • DDL 数据定义语句:用来维护存储数据的结构,常用于对数据库、表进行操作
  • DML 数据操纵语句:用来对数据进行操作,比如对表中的数据进行增删改查
  • DCL 数据控制语句:主要负责权限和事务的管理,可以给用户赋予数据库的权限

注:DML 数据操纵语句中还细分出了一个 DQL 数据查询语句,例如查询时携带的各种条件。

四、MySQL架构

MySQL 是一个可移植的数据库,可以在几乎所有操作系统上运行,但主要在 Linux 类似的服务器后端中运行。

得益于优秀的分层设计,MySQL 能保证在各个平台运行时,物理体系结构的一致性,具体分层如下

图片来源:一文搞懂MySQL体系架构!!

大体可以分为三层

  • 第一层:解决安全和连接管理
  • 第二层:词法、语法分析以及 SQL 语句优化
  • 第三层:完成数据的存储方案

五、存储引擎

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

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

(一)查看存储引擎

MySQL 中可以选择使用不同的存储引擎,不同的存储引擎所带来的效果不同,可以理解为汽车引擎,V6水平对置W12转子马达 之间还是有差异的。

如何查看当前支持哪些存储引擎?

mysql> show engines;

如果觉得不方便查看,可以输入 mysql> show engines \G; 表示格式化显示 :

当前 MySQL 支持的存储引擎有很多,可以查看创建数据库时默认使用的存储引擎

vim /etc/my.cnf

这其实就是当时配置 my.cnf 时我们指定的存储引擎 InnoDB,也是 MySQL 中常用的存储引擎之一;也可以在表创建成功后,查看使用了哪个引擎:

mysql> show create table T1;

创建表时,如果不指定,就使用 my.cnf 中的默认存储引擎,如果指定了,就使用用户指定的存储引擎,根据实际业务场景决定,非常灵活。

(二)存储引擎间的区别

存储引擎事务支持ACID 兼容性锁定级别数据表      类型支持的索引类型外键约束全文搜索备注
InnoDB行级锁事务表BTreeMySQL 默认存储引擎,适用于事务处理。
MRG_MYISAM表级锁非事务表哈希表合并(合并式)存储引擎,不常用。
MEMORY表级锁临时表将数据存储在内存中,适用于临时数据。
BLACKHOLE表级锁非事务表BTree、全文黑洞存储引擎,丢弃所有写入数据。
MyISAM表级锁非事务表早期 MySQL 默认存储引擎,性能较快。
CSV表级锁非事务表存储数据以逗号分隔值(CSV)格式。
ARCHIVE表级锁非事务表用于性能监控和分析系统性能。
PERFORMANCE_SCHEMA无锁定系统表用于性能监控和分析系统性能。
FEDERATED表级锁非事务表用于访问远程数据库的存储引擎。

存储引擎有很多,主要记住两个就行了:InnoDB 和 MyISAM,这两个数据库几乎覆盖了 80% 的业务场景,至于它俩的区别也很简单:

  • InnoDB 适合需要事务支持、数据完整性和高并发性能的应用。
  • MyISAM 可能适用于只读数据、全文搜索或特定用途的应用

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

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

相关文章

免费PDF批量加密工具

最近在找PDF批量加密的软件来着,发现很多都是需要收费的,当然如果平时工作需要用的比较多,支持一下还是ok的,但是多数人还是偶尔用一下所以没有必要买。 工作用的话,一般企业文件、个人隐私资料、重要合同...所有重要文…

测试萌新三天速通python基础(二)列表,字符串,元组,字典,遍历,容器,集合,函数

python基础 字符串下标(索引)切片字符串的替换 replace()字符串拆分 split()字符串的连接 join列表 list列表的增删改查列表的反转 reverse()排序列表嵌套元组 tuple 排序 升序降序交换变量字典 dict查询遍历容器集合函数参数函数的嵌套调⽤函数的返回值模块导⼊的⽅法____name…

YOLOv8独家原创改进: AKConv(可改变核卷积)

1.AKConv原理介绍 地址:2311.11587 (arxiv.org) 摘要:基于卷积运算的神经网络在深度学习领域取得了令人瞩目的成果,但标准卷积运算存在两个固有的缺陷。一方面,卷积运算仅限于局部窗口,无法捕获其他位置的信息, 并且它的采样形状是固定的。 另一方面,卷积核的大小固定为…

中国速度!滑湿人自己的MFC第一课!

前言: 这!是一个!新的专栏! 因为!面向对象的程序设计!已经!学的差不多了! 我谭哥那本大厚书!也快!学完了! 于是!sgq!为…

springboot+layuimini实现树形表格

树形表格实现增删改查 这里写目录标题 效果图前端页面代码前端插件后端代码controllerserviceserviceImpl 实现类Entitymapperxml mybatis代码数据表 效果图 前端页面代码 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"&g…

【机器学习300问】87、学习率这种超参数在优化时选择随机搜索方法,为什么要在对数尺度范围进行随机搜索?

在超参数优化过程中&#xff0c;对数尺度范围进行随机采样对于某些类型的超参数来说是非常有效的&#xff0c;特别是当超参数的有效值跨越几个数量级时。学习率就是这样一种超参数&#xff0c;它可以从非常小&#xff08;例如&#xff09;到相对大的值&#xff08;例如&#xf…

Vscode----远程服务器改名

问题描述 一开始Autodl服务器机子很多,但是我使用vscode的时候他们的名字都一样,导致每次要打开机子是都需要重新输入ssh和密码 解决方法 修改vscode端服务器的名字即可解决 打开远程设置,选择你的ssh配置文件 将Host改为你想要的名字,保存刷新即可 点击访问博客查看更多…

机器学习作业4——朴素贝叶斯分类器

目录 一、理论 一个例子&#xff1a; 二、代码 对于代码的解释&#xff1a; 1.fit函数&#xff1a; 2.predict函数: 三、实验结果 原因分析&#xff1a; 一、理论 朴素贝叶斯分类器基于贝叶斯定理进行分类&#xff0c;通过后验概率来判断将新数据归为哪一类。通过利用贝…

“知识世界”项目的自动化测试

目录 1.项目介绍 1.1 项目功能介绍 2. 项目测试 2.1 需求分析 2.2 测试计划 2.3 设计测试用例 &#xff08;1&#xff09; 设计 登录 的测试用例 &#xff08;2&#xff09;设计 文章列表页 的测试用例 &#xff08;3&#xff09;设计 详情页 的测试用例 &#xff08…

线下研讨会 技术沙龙|乐鑫芯片与 ESP RainMaker® 为科技初创企业赋能

众多科技初创企业在智能硬件市场迅猛发展的背景下&#xff0c;对不断变化的需求展现出了高度的敏锐性&#xff0c;期望能够快速将其转化为切实的产品方案。然而&#xff0c;面对复杂繁重的软硬件集成任务&#xff0c;这些企业往往容易陷入研发瓶颈、资金短缺以及效率低下等多重…

BGP综合大实验

实验要求 1.AS1中存在两个环回&#xff0c;一个地址是192.168.1.0/24&#xff0c;改地址不能在任何协议中宣告&#xff1b;AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以ping通&#xff1b…

【超详细】跑通YOLOv8之深度学习环境配置1

环境配置1下载安装内容如下&#xff1a; Anaconda&#xff1a;https://www.anaconda.com/download/success VScode&#xff1a;https://code.visualstudio.com/Download Pycharm&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows Visual Studio2019&a…

Linunx应急响应

Linux应急流程 1,请提交攻击者的 IP 地址2,请提交攻击者使⽤的操作系统3,请提交攻击者进⼊⽹站后台的密码4,请提交攻击者⾸次攻击成功的时间&#xff0c;格式&#xff1a;DD/MM/YY:hh:mm:ss5,请提交攻击者上传的恶意⽂件名&#xff08;含路径&#xff09;6,请提交攻击者写⼊的恶…

Python vs MATLAB:选择深度学习的首选编程语言

Python vs MATLAB&#xff1a;选择深度学习的首选编程语言 在深度学习领域&#xff0c;编程语言的选择对于初学者的学习路径和未来的职业发展至关重要。目前&#xff0c;Python和MATLAB都是进行科学计算和数据分析的流行工具&#xff0c;但它们在深度学习社区中的应用和受欢迎…

天机学堂—学习辅助功能(含场景问答和作业)

我的课表 需求分析 原型图 管理后台 用户端 流程图 数据设计 接口设计 支付成功报名课程后, 加入到我的课表(MQ)分页查询我的课表查询我正在学习的课程根据id查询指定课程的学习状态删除课表中的某课程 代码实现 数据表设计 添加课程到课表&#xff08;非标准接口&#x…

猫头虎分享已解决Bug || **Babel转换器下载问题** Failed to resolve babel-loader dependency`

猫头虎分享已解决Bug &#x1f42f; || Babel转换器下载问题 &#x1f6ab;Failed to resolve babel-loader dependency 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a…

网络 | 应用层-websocket协议报文格式解析

websocket的官方文档为rfc(request for comments)&#xff0c;是网络协议的规范文档。它包含了许多计算机世界的核心知识 除了这里的websocket&#xff0c;它里边还包含我们熟知的http,tcp等协议的解析。 websocket协议对应的编号是rfc 6455 websocket协议格式解析 由图可知&a…

【RAG论文】RAG中半结构化数据的解析和向量化方法

论文简介 论文题目&#xff1a; 《A Method for Parsing and Vectorization of Semi-structured Data used in Retrieval Augmented Generation》 论文链接&#xff1a; https://arxiv.org/abs/2405.03989 代码: https://github.com/linancn/TianGong-AI-Unstructure/tree/m…

数据结构学习/复习13

一、选择排序 1.直接选择排序 2.堆排序 3.性能测试 二、交换排序 1.冒泡排序 2.快速排序 1.Hore版(递归) 2.随机选关键字Hore版(递归) 3.三数取中Hore版(递归) 3.挖坑法改进Hore版(递归) 4.前后指针法 5.小区间优化 5.性能测试 注意事项1&#xff1a;关键字选取时&#xff0c…

微服务架构与单体架构

微服务架构与与单体架构比较 微服务架构是一种将应用程序作为一组小的、独立服务的系统架构风格&#xff0c;每个服务运行在其自己的进程中&#xff0c;并通常围绕业务能力组织。这些服务通过定义良好且轻量级的机制&#xff08;通常是HTTP REST API&#xff09;进行通信。微服…