问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MySQL数据库基础教程:从概念到实战

创作时间:
作者:
@小白创作中心

MySQL数据库基础教程:从概念到实战

引用
CSDN
1.
https://blog.csdn.net/zty857016148/article/details/145065639

本文将带你全面了解数据库的基础知识,从数据库的基本概念到MySQL的具体实现,包括服务器架构、SQL语句分类以及存储引擎等内容。通过本文的学习,你将建立起对数据库的系统认知,并掌握MySQL的核心操作方法。

一、什么是数据库

1.1 基本概念

什么是数据库?

  1. 广义上:数据库是一个组织、存储和管理数据的仓库,它允许用户以结构化的方式存储、访问、修改和检索数据。这些数据通常按照特定的数据模型进行组织,如关系型数据模型、非关系型数据模型等。

  2. 狭义上:数据库指的是用于存储结构化数据的磁盘文件

数据库VS普通文件

  • 普通文件确实提供了数据的存储能力,但是文件并没有提供很好的数据管理能力(如增删查改等操作),通常需要编写程序进行读写、检索、分析处理。
  • 文件存储数据有一下缺点:
    1. 文件的安全性问题
    2. 文件不利于数据的查询和管理,不利于存储海量数据。
    3. 文件在程序中控制不方便
  • 数据库是集组织、存储和管理数据的一整套解决方案,用户只需要给出要求和关键字就能够得到对应的结果。

mysql和mysqld

  • MySQL数据库是基于C(mysql)/S(mysqld)模式的一种网络服务
  • mysqld:mysqld是MySQL数据库的核心服务器进程,负责处理数据库的所有请求和操作。它是一个后台服务程序,常驻于后台,监听和处理客户端的连接请求,执行SQL语句,管理数据库和表结构,处理事务和并发控制等。(通常进程名以d结尾的是守护进程,常驻后台)
  • mysql:mysql是MySQL数据库的客户端命令行工具,用于与MySQL服务器进行交互并执行数据库管理任务。它允许用户通过命令行界面或脚本进行数据库的创建、表的创建、数据的插入、查询等操作。

数据库的存储介质

  • 磁盘
  • 内存

1.2 基本操作

服务管理

  • systemctl start mysql:启动MySQL数据库服务
  • systemctl stop mysql:停止MySQL数据库服务
  • systemctl restart mysql:重启MySQL数据库服务

登录客户端

mysql登录选项

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h:指明目标主机(部署了mysql服务)
  • -P:指明要访问的端口号
  • -u:指明登录用户
  • -p:指明需要输入密码

基本操作

使用mysql建立一个数据库,并建立一张表结构,插入一些数据(对比一下在Linux文件系统中是如何表现的)

创建数据库

create database helloworld;

使用数据库

use helloworld;

创建表

create table student(
    id int,
    name varchar(32),
    gender varchar(2)
);

表中插入数据

insert into student (id, name, gender) values (1, '张三', '男');

查询表中数据

select * from student;
  1. 建立数据库本质就是在datadir路径下创建一个同名的目录文件(datadir是配置文件中指定的用于存储数据的路径)
  2. 在数据库内建立表,本质就是在库目录下创建表文件(表文件的后缀是.ibd)
  3. 由此可见数据库的本质就是文件!只不过这些文件不由程序员直接操作,而是由数据库服务mysqld帮我们进行操作。
  4. 可以看到数据的逻辑结构是表结构。关系型数据模型将数据存储在二维表格中,每个表格由行和列组成。行代表记录,列代表字段,每个字段都有固定的数据类型。
  5. 所有的SQL语句都以;封号结尾

1.3 服务器、数据库、表的关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如下:

1.4 主流数据库

  • SQL Server: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

二、MySQL架构

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

MySQL的架构可以自顶向下分为多个层次,每个层次都有其特定的功能和组件,它们共同协作以实现MySQL数据库的高效、灵活和可扩展性。以下是MySQL架构的详细解释:

客户端

  1. MySQL Connectors(连接器)
  • 含义:MySQL为各编程语言提供的访问接口,如JDBC等,通过这些接口,程序可以直接访问MySQL。
  • 功能:充当应用程序与MySQL数据库之间的桥梁,允许应用程序执行数据库操作,如查询、插入、更新和删除数据等。
  1. MySQL Shell
  • 含义:一个较为高级的MySQL客户端和代码编辑器,需要单独安装。
  • 特点:除了具有MySQL客户端的功能外,还具有能够被JS、Python等语言调用的接口,通常供数据库开发人员使用。

服务端

  1. 连接层
  • 主要功能:处理客户端与MySQL服务器之间的连接,包括接收连接请求、验证用户身份、管理连接线程等。
  • 组件及作用:
  • 网络端口:用于监听来自客户端的连接请求,默认监听端口为3306,但可通过配置文件设置多个监听端口。
  • 连接管理线程:处理端口监听到的连接请求,将请求一对一地转发给执行线程进行处理。执行线程通过线程池进行管理,以提高线程的复用并减少创建线程的开销。
  1. 服务层
  • 核心部分:是MySQL架构中的核心,包含了多个关键组件。
  • 组件及作用:
  • SQL接口:用于接收客户端发送的各种SQL命令,并返回查询结果。
  • 解析器:将请求的SQL语句解析生成一个解析树,包括词法分析和语法分析两个步骤。
  • 查询优化器:将解析树转化成执行计划,并根据统计信息和索引选择最优的执行计划来执行SQL语句。
  • 缓存:用于提高查询语句的性能。MySQL 8.0之前的版本包含查询缓存,用于缓存SELECT查询的结果集;但MySQL 8.0及之后的版本已移除查询缓存,因为在实际应用中,缓存更新和维护的开销较大。此外,缓冲池也是缓存的一种,用于缓存InnoDB表的数据页和索引页,以加速数据读取。
  1. 存储引擎层
  • 主要功能:实现数据的实际存储和检索,支持多种存储引擎。
  • 组件及作用:MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种引擎具有不同的特性,适用于不同的应用场景。用户可以根据需求选择合适的存储引擎进行数据存储和检索。
  1. 文件系统层
  • 主要功能:管理数据文件、日志文件等物理存储。
  • 组件及作用:包含具体的日志文件和数据文件以及MySQL相关的程序,用于存储MySQL的数据、索引、配置信息、日志文件等。其中,重做日志(Redo Log)记录事务修改的数据,用于崩溃恢复;回滚日志(Undo Log)保存旧版本数据,支持事务回滚和多版本并发控制;二进制日志(Binary Log)记录所有更改数据库结构和数据的操作,用于主从复制和点恢复。

三、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

四、存储引擎

4.1 查看存储引擎

SQL语句:

show engines;

4.2 存储引擎对比

数据库的存储引擎比较与选择-天翼云开发者社区 - 天翼云 (ctyun.cn)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号