赞
踩
目录
个人主页:东洛的克莱斯韦克-CSDN博客
数据库 | 开发商 | 特点 | 适用场景 |
---|---|---|---|
SQL Server | 微软 | .NET程序员的最爱,适合中大型项目 | 企业级应用,中大型数据库解决方案 |
Oracle | 甲骨文 | 适合大型项目,复杂的业务逻辑,但并发性一般 | 企业级应用,复杂业务逻辑处理 |
MySQL | 甲骨文(通过收购Sun Microsystems) | 世界上最受欢迎的数据库,并发性好,不适合复杂业务 | 电商,SNS,论坛,简单SQL处理 |
PostgreSQL | 加州大学伯克利分校计算机系 | 免费使用、修改和分发,适用于私用、商用和学术研究 | 多种应用场景,包括企业级应用 |
SQLite | 公开源代码社区 | 轻型数据库,遵守ACID,嵌入式设计,资源占用低 | 嵌入式设备,移动应用,小型项目 |
H2 | Java社区 | 用Java开发的嵌入式数据库,可直接嵌入到应用项目中 | 测试环境,小型应用,嵌入式数据库需求 |
MySQL是一种网络服务,有客户端和服务端。可以用 which
命令查看路径。
客户端一般在/usr/bin/mysql 路径下,服务端一般在/usr/sbin/mysqld (以d结尾的进程一般都是守护进程)路径下。
而数据存放的路径可以在/etc/my.cnf配置文件中配置,默认是/var/lib/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 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 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)等。
提供了日志文件(如错误日志、慢查询日志、二进制日志等)来记录操作和数据变化,用于审计、恢复和数据复制等功能。
类别 | 缩写 | 描述 | 代表指令 |
---|---|---|---|
数据定义语言 | DDL | 用来维护存储数据的结构 | create, drop, alter |
数据操纵语言 | DML | 用来对数据进行操作 | insert, delete, update |
数据查询语言 | DQL | 专门用于数据查询(属于DML的子集) | select |
数据控制语言 | DCL | 主要负责权限管理和事务 | grant, revoke, commit |
可用如下命令查看存储引擎
show engines;
存储引擎 | 特点 | 适用场景 |
---|---|---|
MyISAM | - 不支持事务<br>- 表级锁定<br>- 支持全文索引<br>- 可能有存储限制(取决于操作系统和文件系统) | 读密集型应用,如Web内容展示、简单查询操作 |
BDB (Berkeley DB) | - 支持事务<br>- 可能支持表级或页级锁定(取决于版本和配置)<br>- 具有高级特性如热备份、恢复和复制 | 较少使用,部分MySQL版本可能不再支持或推荐使用BDB |
Memory | - 数据完全存储在内存中<br>- 不支持事务<br>- 表级锁定<br>- 大小受可用内存限制 | 临时数据、缓存或需要极快访问速度的小数据集 |
InnoDB | - 默认存储引擎<br>- 支持ACID事务处理<br>- 行级锁定<br>- 支持MVCC<br>- 支持外键约束<br>- 强大的崩溃恢复功能 | 需要高并发、事务处理、外键约束和复杂查询的应用 |
Archive | - 压缩存储以节省空间<br>- 不支持索引(除主键外)<br>- 主要用于存档 | 日志记录、历史数据存档等 |
NDB (MySQL Cluster NDB) | - 分布式存储<br>- 自动分片<br>- 实时数据同步<br>- 高可用性、数据冗余和负载均衡 | 需要高可用性和可扩展性的分布式数据库应用 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。