目录
[一. 数据库概念](#一. 数据库概念)
[1. 什么是数据库](#1. 什么是数据库)
[二. 🔷基础操作](#二. 🔷基础操作)
[三. 主流数据库](#三. 主流数据库)
[四. 基础知识](#四. 基础知识)
[2. 存储引擎对比](#2. 存储引擎对比)
在上一篇文章[MySQL#0] 详解如何在 Linux 上安装 MySQL | 常见登录问题,我们安装好了环境,接下来就来一起学习操作吧~
一. 数据库概念
0.连接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p
- -h:指明登录部署了MySQL服务的主机
- -P:指明要访问的端口号
- -u:指明登录用户
- -p:指明需要输入密码
注意:
- 如果没有写-h 127.0.0.1,默认是连接本地
- 如果没有写-P 3306,默认是连接3306号端口
1.目前我们是免密码登录的,后面必须设置密码
2.密码输入的时候,是不会回显的
1. 什么是数据库
服务器角度理解数据库
在连接数据库时,我们使用的是mysql
,启动数据库服务时使用的是mysqld
。这两个分别代表什么呢?
mysql
是数据库服务的客户端。mysqld
是数据库服务的服务器端。
说明:
- 凡是可执行程序带有
d
的,通常称为守护进程。- MySQL本质:一个基于C/S(Client/Server)模式的网络服务
mysqld
就是网络服务的后端- 通常我们提到MySQL,其实指的是MySQL的客户端
mysql
。
这就是我们对数据库的第一层理解。
- 现在我们明白了为什么安装MySQL时需要通过
yum
安装mysqld
- 并启动服务后才能使用
mysql
进行连接,因为它是一个网络服务。 - 既然MySQL是网络服务,我们可以查找到它绑定的端口号。
MySQL服务是什么?
- MySQL是一种提供数据存取服务的网络程序。
口语中的数据库
数据库通常指的是,在磁盘或内存中存储的特定结构化的数据。
- 数据库可以被看作是一套存储方案,通常指的是关系型数据库,表与表之间有特定的关系,数据按照特定逻辑进行组织。
- 数据库最终还是存储在磁盘或内存中。我们暂时只考虑磁盘,存储在磁盘中的一组数据库文件就可以称为数据库,即一批数据以数据库的形式存储在磁盘中。
我们可以区分如下几点:
- 数据库服务:
mysqld
- 数据库客户端:
mysql
- 数据库:磁盘上存储的一套数据库方案(文件)
数据库的本质仍然是存储在磁盘中的某种结构化数据,虽然我们可能对它的具体形式还不完全理解。文件是我们熟悉的存储形式
为什么数据不直接以文件形式存储,而需要使用数据库呢?
虽然文件提供了数据存储的基本功能,但它没有提供对数据内容的管理能力。
- 举个例子,假设一个文件有10万行内容,每行都是一个IP地址,现在需要统计以 127****开头的IP地址个数。
- 程序员需要打开文件,按行读取并手动统计,这是一项耗时的工作。
- 文件只提供基本的读写功能,而没有数据管理能力,因此不方便。
数据库的意义: 它是一种数据存储的解决方案。程序员只需提出查询需求,数据库就会根据需求分析并返回结果。相当于是将数据管理起来了,使数据查询更加方便
例如,如果将10万个IP地址存储到数据库中,查询以127
开头的IP地址时,数据库会进行内部处理,最终返回统计结果,而程序员无需自己编写复杂的代码。
总结数据库的作用
数据库本质上是一套对外提供数据存储和管理的解决方案。它包括:
- 数据库客户端(
mysql
) - 数据库服务器(
mysqld
) - 存储在磁盘中的数据库文件
数据库的作用是让客户端提出需求后,服务器从数据库文件中进行操作,最终将结果返回客户端,展示给用户。
理解
- 当一个MySQL客户端mysql提出一个需求(查询
- MySQL服务端mysqld就去数据库文件当中自己进行增、删、查、改等,然后把结果返回给mysqld
- 然后mysqld把结果交给mysql,然后就显示给用户了
总结
最后的结论------什么是数据库?
- 局部理解: 数据库是存储在磁盘中的结构化数据文件,这些文件能够被
mysqld
服务进程进行增删查改。 - 宏观理解: 数据库是一整套数据存储的解决方案。
文件保存数据的缺点:
- 安全性问题
- 不利于数据查询和管理
- 不利于存储海量数据
- 程序中控制不便
数据库的存储介质:
- 磁盘
- 内存
为了解决文件存储的这些问题,专家们设计了数据库,能够更有效地管理数据。数据库的使用和管理是衡量程序员水平的重要指标。
二. 🔷基础操作
见一见数据库
- 建立数据库,本质就是Linux下的一个目录
- 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
- 数据库本质其实也是文件!!只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作
使用 MySQL 建立一个数据库,建立一张表结构,插入一些数据,最后对比 MySQL 在 Linux 中的表现
-
🧫 查看当前数据库
show databases;
此时可以查看当前所有存在的数据库。
-
🧫 **数据库在哪里存放?**我们可以通过查看 MySQL 的配置文件,找到数据库的存储路径:
vim /etc/my.cnf
在配置文件中,可以看到 datadir
字段,它指明了 MySQL 服务数据存放的路径。
切换到这个路径下,可以看到数据目录中存放的数据内容,包含普通文件和目录。
细心观察,您可能已经发现了一些有趣的现象,我们下面讲讨论
-
🧫 创建数据库 接下来,我们通过 MySQL 客户端向
mysqld
服务端发出创建数据库的请求:create database helloworld;
创建数据库后,原本数据目录中没有 helloworld
这个目录,现在会多出一个名为 helloworld
的目录。
进入该目录后,可以发现除了一个配置文件外,并没有其他文件。
所谓 建立数据库,实际上是在 Linux 系统下创建了一个目录。
当客户端发出 create database
的 SQL 指令后,mysqld
进程识别指令并在磁盘上创建一个目录。
这就是数据库在系统层面的表现。
-
🧫 选择数据库在创建数据库后,需要选择操作的数据库:
use helloworld;
就像在文件系统中选择了一个具体的目录一样,use helloworld
代表接下来所有的操作都将在该数据库下进行。
-
🧫 创建数据库表 接下来,创建一个名为
student
的表结构:create table student(
name varchar(32),
age int,
gender varchar(2)
);
表的字段定义了数据的属性列及其类型。建立了表之后,在数据库目录中会生成两个与该表相关的文件。
- 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
- 数据库本质其实也是文件!!只不过这些文件并不是由程序员直接操作,而是由数据库服务帮(mysqld)我们进行操作。
-
🧫 向表中插入数据 现在向
student
表中插入一些数据:insert into student (name, age, gender) values ('张三', 23, '男');
insert into student (name, age, gender) values ('李四', 24, '女');
insert into student (name, age, gender) values ('王五', 25, '男');
在 name
、age
、gender
三列中插入相应的数据。values
后跟的是要插入的具体值。
-
🧫 查询表中的数据使用以下命令查询刚才插入的数据:
select * from student;
这会返回表中的所有记录。
总结
- 数据 库****的创建本质 :在 Linux 系统下创建一个目录。
- 表****的创建本质 :创建相应的文件。
- 数据存储的本质 :将数据以结构化的方式存储到这些文件中。
- 程序员不需要直接操作文件系统,而是通过 SQL 语句与 MySQL 服务交互,服务负责在磁盘上执行具体的操作。
操作总结
show
creat
use
creat table //创建一张表
insert //插入数据
注意:
- 输入时 mysql 命令时,要加 ;
- mysql 中有很多库,库中又有很多的表
- 程序员不关心文件格式,只关心数据和想做什么,交给 sql 去实现即可
三. 主流数据库
以下是根据您的要求整理的内容格式:
MySQL:
- 世界上最受欢迎的数据库之一,由甲骨文公司拥有。
- 并发性能良好,但可能不适合处理非常复杂的业务逻辑。
- 主要应用于电商、社交网络服务(SNS)、论坛等场景,对简单的SQL查询处理效果好。
- 总结:效率良好,生态完善,免费
SQLite:
- 轻量级数据库引擎,遵循ACID属性的关系型数据库管理系统。
- 设计初衷是作为嵌入式解决方案,集成于小型C语言库中。
- 极其适合资源受限的环境,如嵌入式系统,通常仅需几百KB内存即可运行。
SQL Server:
- 微软出品的企业级数据库产品。
- 深受.NET开发者喜爱,适用于中大型项目开发。
Oracle:
- 也是甲骨文公司的旗舰数据库产品。
- 针对大型企业级应用设计,能够支持复杂的业务流程。eg 银行(需付费,性能更好
- 相较于MySQL,在高并发场景下的表现可能略逊一筹。
PostgreSQL:
- 起源于加州大学伯克利分校的一个开源关系型数据库项目。
- 支持广泛的高级功能,无论是个人使用、商业部署还是科学研究均可免费获取、修改和分发源代码。
H2 Database:
- 一个完全基于Java编写的轻量级嵌入式数据库。
- 可以直接以类库的形式集成到应用程序内部,便于快速开发与测试。
四. 基础知识
服务器,数据库,表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据
- 数据库服务器、数据库和表的关系如下:
数据逻辑存储
数据逻辑存储 在表中插入数据后,这些数据在逻辑上是以行列式的结构存储的。
- 一行表示一个实体(例如一个人)
- 一列表示实体的某个属性(如姓名、年龄、性别)。
数据库内的数据在物理上并不是直接存储为表的形式,而是通过 MySQL 特定的协议和格式进行存储和管理。
MySQL架构
MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行
- 如 Unix/Linux、Windows、 Mac和Solaris
- 各种系统在底层实现方面各有不同,但是 MySQL基本上能保证在各个平台上的物理体系结构的一致性
最上面是MySQL客户端,现在我们在Linux下是以命令行方式使用数据库,后面还会以C/C++,图像化界面使用数据库。
整体对于一个MySQL Server来讲主要功能由三层构成:
- 第一层:连接池 ------ 主要是安全连接管理(连接管理、鉴权、保证安全...)。
- 中间这一层 ------ 比如说客户端会下达各种SQL指令,收到指令然后会对指令做各种语法、词法分析,甚至会对SQL语句做一定程度优化按照SQL协议然后下达给下一层。
- 第三层:存储引擎 ------ 匹配的就是一个一个存储引擎,作用有点像计算机体系结构中的驱动。下面可能有不同种类的引擎,这些存储引擎从上层接收下达下来的经过词法语法调优过的SQL语句,然后存储引擎对这些SQL语句解释,说白了最下面这一层才是真正干事的,它帮我们去访问指定的数据库文件,访问指定的表。把数据进行增删查改。
怎么会有这么多存储引擎呢?
- 主要还是因为数据库是给我们提供数据存储服务的,但是这个数据有种类的差别,有的是文档型的,有的是二进制型的,有的是大文件型的等等
- 所以针对不同种类的数据的需求可能采用不同的存储方案
- 所以MySQL给我们提供各种各样的搜索引擎,诸如MyISAM适合大文件读取,InnoDB有很丰富的索引支持可以方便进行快速的搜索查找。
- 所以可以针对不同的场景由用户来配置MySQL底层,采用不同的存储引擎来满足上层的存储需求。
总结一下MySQL Server有三层:
- 第一层:安全连接管理
- 第二层:词法、语法分析,SQL语句优化
- 第三层:解释 SQL 语句,具体完成数据存储方案
- 最下面一层:就是它依赖的对应文件系统,帮我们把数据以二进制方式存到特定的目录下然后构建特定的普通文件把数据存储好。
最终总结一下,MySQL依旧是一个文件系统,只不过处于OS提供的文件系统之上的一套存储解决方案。
最后一点 ,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
也可以类似于数据结构来理解:
- DDL: 定义一个链表
- DML: 对链表增删查改
存储引擎
1.何为存储引擎?
- 存储引擎:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法
- MySQL的 核心**:插件式存储引擎,支持多种** 存储引擎(解释 SQL 语句
- 查看存储引擎:show engines;
2. 存储引擎对比
每一种存储引擎都有自己对应的一大堆功能。大部分情况下MySQL常用的存储引擎是MyISAM,InnoDB。其中更常用的是InnoDB。
之后会再具体的讲到~下篇文章见