欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:MySQL
目录
👉🏻什么是数据库?
数据库是一个组织化的数据集合,通常以一种结构化的形式存储、管理和检索数据。它可以是一个简单的文件,也可以是一个大型的、高度复杂的系统。数据库的设计旨在使数据容易访问、管理和更新。它们在许多领域都有广泛的应用,包括企业管理、科学研究、教育、电子商务等等。
数据库通常由一个或多个表组成,每个表包含一系列相关的数据。这些数据按照一定的结构和格式进行组织,并且可以通过查询语言(例如MYSQL)进行检索、更新和删除。数据库还提供了一些功能,如数据完整性约束、安全性控制、事务管理等,以确保数据的一致性、安全性和可靠性。
主流数据库
SQL Sever
: 微软的产品,.Net程序员的最爱,中大型项目。Oracle
: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不MySQL。MySQL
:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。PostgreSQL
:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。SQLite
: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。H2
: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
服务器,数据库,表关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多
个数据库,一般开发人员会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
数据库本质:在磁盘或者内存中存储的特定结构组织的数据--将来在磁盘上存储的一套数据库服务方案,你给我字段或者要求,我直接给你结果就行
mysql语言创建数据库
以下是在linux环境下演示创建一个数据库的代码示例:
1.创建数据库
sql
create database hellomysql;
/var/lib/mysql目录下可查看创建的数据库目录
2.使用数据库
sql
use helloworld;
3.创建数据库表
sql
create table student(
id int,
name varchar(32),
gender varchar(2)
);
1.建立数据库,本质就是Linux下的一个目录
2.在数据库中建表,本质就是目录中的一个个文件
4.表中插入数据
sql
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
5.查询表中的数据
sql
select * from student;
👉🏻sql分类
SQL(结构化查询语言)是一种用于管理关系型数据库的标准化语言,它可以分为以下几个主要的类别:
-
数据查询语言(Data Query Language,DQL):
- DQL 用于检索数据库中存储的数据,最常见的 DQL 命令是 SELECT。通过 SELECT 命令,可以从数据库中选择需要的数据,并根据条件进行过滤和排序。
-
数据操作语言(Data Manipulation Language,DML):
- DML 用于对数据库中的数据进行操作,包括插入、更新、删除数据等操作。常见的 DML 命令包括 INSERT、UPDATE、DELETE。
-
数据定义语言(Data Definition Language,DDL):
- DDL 用于定义数据库的结构,包括创建和删除数据库、表、索引等对象。常见的 DDL 命令包括 CREATE、DROP、ALTER。
-
数据控制语言(Data Control Language,DCL):
- DCL 用于控制数据库用户的访问权限和安全性,包括授予和撤销权限等操作。常见的 DCL 命令包括 GRANT、REVOKE。
-
事务控制语言(Transaction Control Language,TCL):
- TCL 用于管理数据库中的事务,包括事务的开始、提交、回滚等操作。常见的 TCL 命令包括 COMMIT、ROLLBACK、SAVEPOINT。
这些类别涵盖了 SQL 中常见的命令和操作,用于对数据库进行查询、操作、定义结构和管理安全性等方面的工作。
👉🏻Mysql架构
MySQL 是一个流行的开源关系型数据库管理系统
(RDBMS),其架构包括以下主要组件:
-
连接管理器(Connection Manager):负责管理客户端与服务器之间的连接。它处理新的连接请求、验证用户身份、分配线程等。
-
查询解析器与优化器(Query Parser and Optimizer) :当客户端发送查询请求时,查询解析器负责解析查询语句,将其转换为内部数据结构。优化器则负责分析查询,并尝试找到最有效的执行计划,以提高查询性能。
-
存储引擎(Storage Engine) :MySQL 支持多种存储引擎,每种引擎都负责管理数据的存储和检索。常见的存储引擎包括
InnoDB
、MyISAM
、Memory
等,每种引擎都有其特定的优点和适用场景。 -
查询缓存(Query Cache):MySQL 可以缓存查询结果,以提高相同查询的性能。但在一些情况下,查询缓存可能会降低性能,因此在一些版本中已经被弃用。
-
日志模块(Logging Module):MySQL 使用多种日志来记录系统活动,包括二进制日志(Binary Log)、错误日志(Error Log)、查询日志(Query Log)等。这些日志对于故障排除、恢复和性能调优都非常重要。
-
事务管理器(Transaction Manager):MySQL 支持事务,事务管理器负责实现事务的 ACID 属性(原子性、一致性、隔离性、持久性),以确保数据的完整性和一致性。
-
权限与安全模块(Security and Privileges Module):MySQL 提供了灵活的权限管理机制,可以控制用户对数据库、表和其他对象的访问权限。此外,MySQL 还支持 SSL 加密等安全特性。
存储引擎
存储引擎是数据库管理系统中的一个重要组件,负责管理数据的存储和检索。不同的存储引擎具有不同的特性和优缺点,适用于不同的使用场景。
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
linux下查看存储引擎
sql
show engines;
在 MySQL 中,常见的存储引擎包括以下几种:
-
InnoDB:
- InnoDB 是 MySQL 默认的存储引擎,它支持事务和行级锁定,提供了高并发和高可靠性的特性。InnoDB 也支持外键约束、崩溃恢复等功能,适用于大多数 OLTP(联机事务处理)场景。
-
MyISAM:
- MyISAM 是 MySQL 较早的存储引擎,它不支持事务,但具有较高的性能和简单的结构。MyISAM 适合于读操作频繁、写操作较少的场景,如数据仓库、日志分析等。
-
Memory:
- Memory 存储引擎将数据存储在内存中,因此具有非常高的读写性能。但是,由于数据存储在内存中,数据库重启时数据会丢失。Memory 引擎适用于临时表、缓存等场景。
-
Archive:
- Archive 存储引擎专门用于存储归档数据,它采用压缩算法存储数据,适合于数据归档和备份。
-
CSV:
- CSV 存储引擎将数据以 CSV(逗号分隔值)格式存储在文本文件中,适用于数据导入和导出操作。
-
Blackhole:
- Blackhole 存储引擎实际上不存储任何数据,它将所有写入操作都忽略,适用于数据复制和分发场景。
-
NDB Cluster:
- NDB Cluster 存储引擎是 MySQL Cluster 的一部分,它提供了高可用性和分布式存储的特性,适用于大规模的分布式应用。
让我们来用一个幽默的比喻来解释存储引擎的作用:
想象一下你正在组装一座超级豪华的乐高城堡。城堡的不同部分需要用不同类型的乐高块来构建,而每种类型的乐高块都有自己的特性。
-
InnoDB 块 :这些块是城堡的主要支柱,非常坚固且能够相互连接。它们负责支撑整个城堡的结构,并确保城堡稳固耐用。当你需要城堡变得更加结实时,InnoDB 块是首选。
-
MyISAM 块 :这些块很轻便,快速组装,但不够稳固。它们适合用于城堡的一些简单装饰部分,比如花园中的小树屋或者塔楼的旗杆。虽然它们不够坚固,但在一些不需要太多支撑的地方使用它们可以节省时间和成本。
-
Memory 块 :这些块非常快速,但它们有一个大问题------它们都是用冰淇淋做的!虽然冰淇淋块组成的城堡看起来很诱人,但一旦太阳一出来,整个城堡就会融化。因此,Memory 块适合用于制作临时的城堡,比如在一个冰雪节庆典上展示一天后就会融化的城堡。
-
Archive 块 :这些块非常节省空间,因为它们可以压缩成小小的立方体。它们适合用于城堡中的一些旧档案,比如古老的地图和传说。
通过这个比喻,你可以更好地理解存储引擎的作用:它们就像乐高城堡的不同类型的块一样,负责构建和管理数据库的不同部分,以满足不同的需求和要求。
如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长