mysql数据库基础

发布于:2025-09-10 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

前言

一.数据库概念

1.什么是数据库

2.数据库存储介质

3.一些常见数据库

二.数据库基本操作

1.连接数据库

2.使用数据库

3.管理数据库

4.服务器、数据库、表关系

三、MySQL语句分类

四、MySQL架构

五、存储引擎

查看存储引擎

存储引擎的区别

总结


前言

  这是第一篇mysql数据库相关的内容!!

一.数据库概念

1.什么是数据库

数据库一般指的是在磁盘或者内存中存储的特定结构组织的数据——将来在磁盘上存储的一套数据库方案

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

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

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

文件存储的缺点:

  • 安全性问题:数据容易被修改,可能造成误操作

  • 不利于数据查询与管理:数据直接存储,没有被高效组织

  • 不利于存储海量数据:数据量过大时,会导致文件体积膨胀

  • 在程序中不方便控制:读取文件中的数据需要借助文件流,操作繁琐

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

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

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

image-20250811181832227

关于mysql的安装,ubuntu系统的话可以采用以下命令进行安装和查看相关信息

sudo apt update  # 更新软件源
sudo apt install mysql-server -y  # 安装
mysql --version  # 查看版本
sudo systemctl status mysql  # 查看运行状态
netstat -tln  # 以数字ip形式显示mysql的tcp监听状态

我们可以通过which mysql和which mysqld来确认我们是否成功安装mysql服务器(mysqld)和客户端(mysql)

image-20250811181215907

[^]  和这样差不多就是安装好了 

image-20250811181517044

mysqld 中的 d 表示单词 daemon,即 守护进程,这是一种特殊的进程,父进程为 1 号进程(事实上我们也在图上也可以看出),即系统进程,无需依赖 bash 进程运行,而是直接运行在后台,这样它就能不断在后台运行

在安装完成之后,我们可以使用sudo mysql -u root命令直接进行无密码登录

image-20250811180423000

退出时可以输入quit

image-20250811181116076

2.数据库存储介质

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

  • 磁盘

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

  • 内存

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

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

3.一些常见数据库

  • SQL Server: 微软的产品,深受 .Net 开发者的喜爱,适合中大型项目的开发

  • Oracle:甲骨文公司推出的产品,适合大型项目,或者具有复杂逻辑的项目,其并发性能一般不如 MySQL

  • MySQL:由瑞典公司MySQL AB开发,是世界上最受欢迎的数据库,并发性能好,对简单的 SQL 处理效果好,适用于 电商、SNS、论坛 等项目开发,后被甲骨文公司收购

  • SQLite:由 Dwayne Richard Hipp 于 2000 年创建,是一种轻量级、嵌入式的关系型数据库,遵循 ACID原则(原子性、一致性、隔离性、持久性),并且它的占用资源非常低,仅需几百 KB,广泛用于移动应用、嵌入式系统、桌面应用、Web浏览器、游戏等各种应用程序中

我们这里当然使用的是免费的mysql数据库进行学习数据库相关内容

二.数据库基本操作

1.连接数据库

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

连接数据库可以这样操作:

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

其中:

  • -u 后跟想要登录 MySQL 的用户名,比如 root

  • -p 表示使用密码登录,可以紧跟密码,也可以回车后输入

  • -h 表示 MySQL 服务部署机器的 IP 地址

  • -P 表示 MySQL 服务进程所使用的端口号

image-20250811175403161

这里要注意的是,在用非root用户连接时前面要带上sudo,这样才能成功输入密码后连接成功

image-20250811175704270

2.使用数据库

这里要特别强调的是sql语句结尾得加分号;

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

show databases;

image-20250812215328159

创建一个名为 Test 的数据库

create database Test;

image-20250812215744764

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

注:

  • 查看此目录需要先退出 MySQL,直接输入 quit 退出

  • 因为是系统级文件,需要借助 root 身份才能查看

image-20250812220400454

在使用该库之前我们得先选定该库(MySQL 中会有很多数据库,在进行 建表、查询 等操作前,需要先指明使用哪一个数据库进行操作

use Test;

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

select database();

image-20250812220727890

ok,结果表明已经选定使用Test库,现在我们来创建一个数据表(以学生信息为例)

create table student(
id int, //id
name varchar(32), //姓名
gender varchar(2) //性别
);

image-20250812221326291

此时我们查看在/var/lib/mysql中Test这个目录中的内容就会发现多出了一个名为student.ibd的文件,也就是说明——在数据库内建立表,本质就是在linux下创建对应的文件

image-20250812221652585

[^]: 如果你的MySQL的版本在8.0以下,那么这里还会有后缀为.frm 文件,我这里是没有的

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

desc student;

image-20250812222038712

[^]  这样就说明是创建成功了! 

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

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

system clear

OK,现在有了表结构,我们就可以向表中插入部分数据

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

类似以下例子:
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');

image-20250812222445505

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

现在我们开始查询 student 表中的数据

select * from student;

image-20250812222648810

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

以上就是我们如何创建数据库、创建表、插入数据、查询数据 的内容了,虽然这些命令都是我们用户在输入完成,但是这些工作在底层是由mysql服务帮我们做的 —— 也就是表明数据库本质也是文件!只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作

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

3.管理数据库

  • 执行 win+r 输入 services.msc 打开服务管理器

  • 通过下图左侧停止,暂停,重启动按钮进行数据库管理

image-20250812224149335

4.服务器、数据库、表关系

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

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

数据库服务器、数据库和表的关系如下 :

image-20250812225121221

关于表:

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

image-20250812224904780

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

  • 行:数据信息

  • 列:数据属性

(这种行列式是数据在数据库中的逻辑存储结构,注意:在物理结构上就不是这样存的!)

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

三、MySQL语句分类

MySQL 中的语句可分为三类:

  • DDL 数据定义语句:用来维护存储数据的结构,常用于对数据库、表进行操作

    代表指令: create, drop, alter

  • DML 数据操纵语句:用来对数据进行操作,比如对表中的数据进行增删改查

    代表指令: insert,delete,update

    (注意:DML 数据操纵语句中还细分出了一个 DQL 数据查询语句,代表:select)

  • DCL 数据控制语句:主要负责权限和事务的管理,可以给用户赋予数据库的权限

    代表指令: grant,revoke,commit

image-20250812230036077

四、MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。但主要在 Linux 类似的服务器后端中运行,得益于优秀的分层设计,MySQL 能保证在各个平台运行时,物理体系结构的一致性,具体分层如下

image-20250814094321006

大体是分为以下三层:

  • 第一层:解决安全和连接管理

  • 第二层:词法、语法分析以及 SQL 语句优化

  • 第三层:完成数据的存储方案

五、存储引擎

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

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

查看存储引擎

不同的存储引擎所带来的效果不同,就好比汽车采用不同的汽车引擎带来的效果会不一样,这是一个道理的

show engines \G;

image-20250814110520787

可以看到有很多存储引擎,现在我们查看我们的默认配置,看看我们默认的配置引擎是什么!

vim /etc/mysql/mysql.conf.d/mysqld.cnf

image-20250814110648209

可以看到默认引擎是 InnoDB,我们也可以看看我们创建表的时候,采用的是哪个引擎

show create table student;

image-20250814111032344

可以看到使用的引擎还是 InnoDB

存储引擎的区别

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

  • InnoDB 适合需要事务支持、数据完整性和高并发性能的应用

  • MyISAM 可能适用于只读数据、全文搜索或特定用途的应用

以下是ai给的两者对比表:

对比维度 InnoDB MyISAM
事务支持 支持 ACID 事务(原子性、一致性、隔离性、持久性),可通过COMMIT/ROLLBACK控制事务。 不支持事务,操作是原子性的(要么完成,要么失败后无恢复)。
行级锁 / 表级锁 支持行级锁(仅对修改的行加锁),并发性能更好,适合高并发写入场景。 仅支持表级锁(对整个表加锁),写入时会阻塞其他读写,并发性能较差。
外键约束 支持外键约束,可保证数据的参照完整性。 不支持外键约束,需通过应用层逻辑保证数据完整性。
存储结构 数据和索引存储在同一个表空间文件(.ibd)中,或共享表空间(ibdata1)。 数据存储在.frm(表结构)、.MYD(数据)、.MYI(索引)三个文件中。
崩溃恢复 支持崩溃后自动恢复(基于事务日志 undo log 和 redo log),数据一致性更好。 不支持自动恢复,崩溃后可能需要手动修复(如myisamchk工具),存在数据丢失风险。
全文索引 MySQL 5.6 及以上版本支持全文索引。 原生支持全文索引,早期版本中全文索引功能更成熟。
数据压缩 支持表空间压缩(如ROW_FORMAT=COMPRESSED),可减少存储空间。 支持索引压缩(PACK_KEYS参数),但数据压缩能力较弱。
适用场景 适合需要事务支持、高并发写入、数据完整性要求高的场景(如电商订单、金融交易)。 适合读多写少、不需要事务、追求查询速度的场景(如博客、新闻网站的静态数据)。
自增列处理 自增列会被持久化,重启后不会重置(基于内存和 redo log)。 自增列存储在内存中,重启后会重新计算(扫描表中最大 ID),可能导致 ID 不连续。
缓存机制 缓存数据和索引(InnoDB Buffer Pool),缓存效率高。 仅缓存索引(Key Buffer),数据缓存依赖操作系统的文件缓存。

总结

  我们将借助以上数据库基础方面的前置知识开启我们mysql的学习之旅!!


网站公告

今日签到

点亮在社区的每一天
去签到