一、什么是数据库
1.1 基本概念
什么是数据库?
数据库VS普通文件
- 普通文件确实提供了数据的存储能力,但是文件并没有提供很好的数据管理能力(如增删查改等操作),通常需要编写程序进行读写、检索、分析处理。
- 文件存储数据有一下缺点:
- 文件的安全性问题
- 文件不利于数据的查询和管理,不利于存储海量数据。
- 文件在程序中控制不方便
- 数据库是集组织、存储和管理数据的一整套解决方案,用户只需要给出要求和关键字就能够得到对应的结果。
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.3 服务器、数据库、表的关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
- 数据库服务器、数据库和表的关系如下:
1.4 主流数据库
- SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
- Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
- MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
- PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
- SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
- H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
二、MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
MySQL的架构可以自顶向下分为多个层次,每个层次都有其特定的功能和组件,它们共同协作以实现MySQL数据库的高效、灵活和可扩展性。以下是MySQL架构的详细解释:
客户端
- 含义:MySQL为各编程语言提供的访问接口,如JDBC等,通过这些接口,程序可以直接访问MySQL。
- 功能:充当应用程序与MySQL数据库之间的桥梁,允许应用程序执行数据库操作,如查询、插入、更新和删除数据等。
- 含义:一个较为高级的MySQL客户端和代码编辑器,需要单独安装。
- 特点:除了具有MySQL客户端的功能外,还具有能够被JS、Python等语言调用的接口,通常供数据库开发人员使用。
服务端
- 主要功能:处理客户端与MySQL服务器之间的连接,包括接收连接请求、验证用户身份、管理连接线程等。
- 组件及作用:
- 网络端口:用于监听来自客户端的连接请求,默认监听端口为3306,但可通过配置文件设置多个监听端口。
- 连接管理线程:处理端口监听到的连接请求,将请求一对一地转发给执行线程进行处理。执行线程通过线程池进行管理,以提高线程的复用并减少创建线程的开销。
- 核心部分:是MySQL架构中的核心,包含了多个关键组件。
- 组件及作用:
- SQL接口:用于接收客户端发送的各种SQL命令,并返回查询结果。
- 解析器:将请求的SQL语句解析生成一个解析树,包括词法分析和语法分析两个步骤。
- 查询优化器:将解析树转化成执行计划,并根据统计信息和索引选择最优的执行计划来执行SQL语句。
- 缓存:用于提高查询语句的性能。MySQL 8.0之前的版本包含查询缓存,用于缓存SELECT查询的结果集;但MySQL 8.0及之后的版本已移除查询缓存,因为在实际应用中,缓存更新和维护的开销较大。此外,缓冲池也是缓存的一种,用于缓存InnoDB表的数据页和索引页,以加速数据读取。
- 主要功能:实现数据的实际存储和检索,支持多种存储引擎。
- 组件及作用:MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种引擎具有不同的特性,适用于不同的应用场景。用户可以根据需求选择合适的存储引擎进行数据存储和检索。
- 主要功能:管理数据文件、日志文件等物理存储。
- 组件及作用:包含具体的日志文件和数据文件以及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)
评论前必须登录!
注册