文章目录
MySQL数据库基础
1、数据库概念
数据库(Database)是一个组织化的集合,用于存储、管理和检索数据。它使用数据库管理系统(DBMS)来提供这些功能。数据库的设计旨在高效、安全地处理大量数据,并支持多用户环境中的并发访问。
为什么是使用数据库,直接使用文件保存数据有什么弊端吗?
使用文件保存数据虽然简单,但存在以下几个缺点:
数据冗余和不一致性:在文件系统中,同一数据可能会被存储在多个文件中,导致数据冗余。这会导致数据不一致性,因为不同文件中的数据可能会发生冲突。
难以管理和检索:文件系统没有结构化的数据存储和检索机制。要找到特定的数据,需要遍历文件或使用复杂的自定义程序。
数据完整性和安全性:文件系统难以保证数据的完整性和安全性,尤其是在多用户环境中。数据库提供了事务管理、数据加密和访问控制等功能来确保数据的完整性和安全性。
并发访问问题:文件系统对并发访问支持较差,多用户同时访问和修改同一个文件时可能会出现数据冲突和丢失。数据库系统通过锁机制和事务管理来解决并发访问问题。
数据备份和恢复:文件系统的备份和恢复操作通常比较复杂,容易出错。而数据库系统提供了更简便和可靠的数据备份和恢复机制。
数据关系处理:文件系统难以处理复杂的数据关系。例如,要表示一对多或多对多的关系,文件系统需要额外的设计和实现。而关系型数据库通过表和外键等机制,能够更自然地表示和操作数据关系。
2、主流数据库
- MySQL
- 开源关系型数据库管理系统
- 广泛用于Web开发
- 支持多种存储引擎,如InnoDB和MyISAM
- PostgreSQL
- 功能强大的开源关系型数据库
- 支持高级SQL功能和扩展,如窗口函数和CTE
- 高度可扩展,支持多种数据类型和自定义函数
- Oracle Database
- 商业化的高性能关系型数据库
- 广泛应用于企业级应用
- 支持大量高级功能,如分区、并行执行和高级安全性
- Microsoft SQL Server
- 微软提供的关系型数据库
- 集成于Windows服务器环境中
- 提供强大的BI工具和分析服务
- MongoDB
- 文档型NoSQL数据库
- 使用JSON风格的文档存储数据
- 灵活且易扩展,适合处理非结构化数据
- Redis
- 基于内存的键值存储NoSQL数据库
- 性能极高,常用于缓存和实时数据处理
- 支持多种数据结构,如列表、集合和有序集合
- SQLite
- 轻量级的嵌入式关系型数据库
- 广泛用于移动应用和小型项目
- 自包含的数据库引擎,无需独立服务器
- Cassandra
- 分布式的列存储NoSQL数据库
- 擅长处理大量数据和高吞吐量
- 高可用性和无单点故障设计,适用于大规模分布式系统
这些数据库在不同的应用场景中表现出色,选择合适的数据库需要考虑具体的需求、数据特性和系统架构。
3、数据库使用
这里和后面的博客我们主要以MySQL讲解为主。
3.1、MySQL的安装
3.2、连接数据库
命令行输入:
mysql -h 127.0.0.1 -P 3306 -u root -p
如果没有写
-h 127.0.0.1
默认是连接本地如果没有写
-P 3306
默认是连接3306端口号注意:刚开始没有设置密码的时候,直接回车是进入不了数据库的!
因此我们一般刚开始学的时候,命令行输入:
mysql -uroot -p
,然后回车就行!
3.3、服务器、数据库、表关系
服务器(Server):
服务器是指运行数据库管理系统(DBMS)的物理或虚拟机器。
它提供计算资源、存储空间和网络连接,支持数据库操作。
服务器可以托管多个数据库实例,每个实例可以运行独立的DBMS服务。
数据库(Database):
数据库是服务器上的一个逻辑容器,用于存储和管理数据。
每个数据库包含多个表、视图、存储过程、触发器和其他数据库对象。
数据库提供数据的组织、存储、检索和管理功能。
一个服务器上可以有多个数据库,分别用于不同的应用或用户。
表(Table):
表是数据库中的一个基本存储结构,用于存放结构化的数据。
表由行和列组成,每一行代表一个记录,每一列代表一个字段或属性。
表定义了数据的模式(schema),包括字段名称、数据类型和约束条件(如主键、外键、唯一性约束等)。
表之间可以通过外键建立关系,实现数据的关联和联接操作。
关系示意图
以下是服务器、数据库和表之间关系的示意图:
服务器 (Server) │ ├── 数据库1 (Database1) │ ├── 表1 (Table1) │ ├── 表2 (Table2) │ └── 表3 (Table3) │ ├── 数据库2 (Database2) │ ├── 表A (TableA) │ ├── 表B (TableB) │ └── 表C (TableC) │ └── 数据库3 (Database3) ├── 表X (TableX) ├── 表Y (TableY) └── 表Z (TableZ)
3.4、使用案例
- 创建数据库:
create database test;
- 使用数据库:
use test;
- 创建表结构:
create table t1( name varchar(20), id int );
- 查询表中所有的数据:
select * from t1;
- 示意图:
3.5、数据存储逻辑
4、MySQL的架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
5、SQL分类
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准语言。SQL语句可以根据其功能和用途分为几类,主要包括以下几种:
- 数据定义语言(DDL - Data Definition Language):DDL 用于定义数据库结构和对象,包括创建、修改和删除数据库中的表、索引、视图等。
- 代表指令:
create、alter、drop、truncate
- 数据操作语言(DML - Data Manipulation Language):DML 用于对数据库中的数据进行查询、插入、更新和删除操作。
- 代表指令:
select、insert、update、delete
- 数据控制语言(DCL - Data Control Language):DCL 用于控制数据库的访问权限和安全性。
- 代表指令:
grant、revoke
- 事务控制语言(TCL - Transaction Control Language):TCL 用于管理数据库中的事务,保证数据的一致性和完整性。
- 代表指令:
commit、rollback、savepoint、release savepoint、set transaction
- 数据查询语言(DQL - Data Query Language):DQL 是一个特定子集,用于查询数据库中的数据,主要是 SELECT 语句。
代表指令:
select
尽管 DQL 通常被视为 DML 的一部分,但它的重要性使其在某些文献中被单独列出。
6、存储引擎
6.1、存储引擎概念
存储引擎(Storage Engine)是数据库管理系统(DBMS)用于存储、管理和检索数据的底层软件组件。不同的存储引擎提供不同的存储机制、索引技术、锁机制和其他功能。使用不同的存储引擎,数据库系统可以根据应用需求进行优化,以提高性能、可靠性和可扩展性。
在MySQL中,存储引擎是可插拔的,这意味着同一个数据库实例中的不同表可以使用不同的存储引擎。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
6.2、查看存储引擎
show engines;
6.3、存储引擎对比
OKOK,MySQL数据库基础就到这里,如果你对Linux和C++也感兴趣的话,可以看看我的主页哦。下面是我的github主页,里面记录了我的学习代码和leetcode的一些题的题解,有兴趣的可以看看。