个人主页:东洛的克莱斯韦克-CSDN博客

主流数据库
数据库开发商特点适用场景SQL Server微软.NET程序员的最爱,适合中大型项目企业级应用,中大型数据库解决方案Oracle甲骨文适合大型项目,复杂的业务逻辑,但并发性一般企业级应用,复杂业务逻辑处理MySQL甲骨文(通过收购Sun Microsystems)世界上最受欢迎的数据库,并发性好,不适合复杂业务电商,SNS,论坛,简单SQL处理PostgreSQL加州大学伯克利分校计算机系免费使用、修改和分发,适用于私用、商用和学术研究多种应用场景,包括企业级应用SQLite公开源代码社区轻型数据库,遵守ACID,嵌入式设计,资源占用低嵌入式设备,移动应用,小型项目H2Java社区用Java开发的嵌入式数据库,可直接嵌入到应用项目中测试环境,小型应用,嵌入式数据库需求
什么是MySQL
MySQL是一种网络服务,有客户端和服务端。可以用
which
命令查看路径。
客户端一般在/usr/bin/mysql 路径下,服务端一般在/usr/sbin/mysqld (以d结尾的进程一般都是守护进程)路径下。
而数据存放的路径可以在/etc/my.cnf配置文件中配置,默认是/var/lib/mysql

MySQL是在文件系统的基础上搭建的一套完整的网络服务,用于高效的存储,管理数据。那存储数据用文件就可以了,为什么还要弄个数据库?
单纯用文件管理数据有如下缺点
文件的安全性并不是很可靠文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便
可以说,文件系统只是提供了最基础的数据保存,数据的读写功能。
MySQL服务
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多 个数据库,一般开发人员会针对每一个应用创建一个数据库。 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。 数据库服务器、数据库和表的关系如下:

上图中的Client是数据库的客户端。MySQL就是数据库的服务端,一般会以守护进程的方式一直在服务器上监听外来请求。客户端用SQL语句向服务端发起请求,而服务端解析SQL语句,然后对数据进行管理相关的工作。
我们平常所说的数据库既不是指的客户端,也不是指的服务端,而是上图中的DB。而DB中的表结构存的就是数据。
从文件系统角度理解数据库
所谓的所谓的数据库(DB)和表结构到底是什么呢?
前文已经提到数据存放的路径在/var/lib/mysql。那么我们创建一个数据库,再创建一张表,/var/lib/mysql路径下会有什么变化呢?
创建数据库的SQL语句
create database helloworld;
使用数据库的SQL语句
use helloworld;
创建数据库表的SQL语句
create table student(
id int,
name varchar(32),
gender varchar(2)
);
我们用上述语句创建一个helloworld的数据库,再向helloworld数据库中建一张student表
先创建数据库,看看/var/lib/mysql目录下的变化

创建数据库后多了一个helloworld目录,进入到helloworld目录,再创建student表看看变化

创建student表之后,在helloworld目录下多了一些student表相关的文件。
从文件系统角度讲,创建数据库就是在系统中创建目录,创建表结构就是在该目录下创建相关文的件。
MySQL架构
文件系统对MySQL来说只是最底层的东西,或者说是基石。现在来谈一谈MySQL的架构。
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体 系结构的一致性。
MySQL架构主要分为几个关键部分,包括客户端连接器、SQL接口、服务(包括连接池、认证和安全性、备份与恢复等)、优化器、缓存以及存储引擎。

客户端连接器
这是MySQL与外部应用程序之间的接口。支持多种编程语言和数据库接口标准,如JDBC、ODBC、NET、PHP、Python、Perl和C API等。这使得MySQL能够灵活地与各种编程语言和环境集成。
服务
连接池:管理到MySQL服务器的连接,以优化资源使用和响应时间。
连接处理:处理来自客户端的连接请求。
身份验证和安全:对客户端进行身份验证,并根据授权确保数据的安全性。
备份与恢复:提供数据备份和恢复功能,以保护数据免受丢失或损坏的风险。
SQL接口
这是MySQL架构中的核心部分,它解析来自客户端的SQL语句,并执行相应的操作。SQL接口还包括优化器、解析器、重写器等多个组件,以优化查询执行和性能。
优化器:根据查询条件和统计信息,生成高效的查询执行计划。
解析器:解析SQL语句,生成解析树,用于后续处理。
重写器:对SQL语句进行重写,以提高查询效率或符合特定优化目标。
存储引擎
MySQL采用插件式存储引擎架构,支持多种存储引擎,如InnoDB、MyISAM、Memory、Archive等。每种存储引擎都有其特点和适用场景,例如InnoDB支持事务处理、行级锁定和外键约束,是MySQL的默认存储引擎。
索引:用于加快数据检索速度,MySQL支持多种索引类型,如B-Tree索引、哈希索引等。
文件系统和存储
MySQL将数据存储在文件系统中,可以是传统的硬盘、SSD、网络存储(如SAN、NAS)等。
提供了日志文件(如错误日志、慢查询日志、二进制日志等)来记录操作和数据变化,用于审计、恢复和数据复制等功能。
SQL语句分类
类别缩写描述代表指令数据定义语言DDL用来维护存储数据的结构create, drop, alter数据操纵语言DML用来对数据进行操作insert, delete, update数据查询语言DQL专门用于数据查询(属于DML的子集)select数据控制语言DCL主要负责权限管理和事务grant, revoke, commit
存储引擎
可用如下命令查看存储引擎
show engines;
存储引擎特点适用场景MyISAM- 不支持事务
- 表级锁定
- 支持全文索引
- 可能有存储限制(取决于操作系统和文件系统)读密集型应用,如Web内容展示、简单查询操作BDB (Berkeley DB)- 支持事务
- 可能支持表级或页级锁定(取决于版本和配置)
- 具有高级特性如热备份、恢复和复制较少使用,部分MySQL版本可能不再支持或推荐使用BDBMemory- 数据完全存储在内存中
- 不支持事务
- 表级锁定
- 大小受可用内存限制临时数据、缓存或需要极快访问速度的小数据集InnoDB- 默认存储引擎
- 支持ACID事务处理
- 行级锁定
- 支持MVCC
- 支持外键约束
- 强大的崩溃恢复功能需要高并发、事务处理、外键约束和复杂查询的应用Archive- 压缩存储以节省空间
- 不支持索引(除主键外)
- 主要用于存档日志记录、历史数据存档等NDB (MySQL Cluster NDB)- 分布式存储
- 自动分片
- 实时数据同步
- 高可用性、数据冗余和负载均衡需要高可用性和可扩展性的分布式数据库应用
【linux】信号的理论概述和实操-CSDN博客
【linux】详解——库-CSDN博客
版权归原作者 东洛的克莱斯韦克 所有, 如有侵权,请联系我们删除。