初识数据库
前言
我们想了解 2025年的今天 登录一个账号 会经过哪些步骤 或者每个人的游戏账号或者游戏财产 很多人说 它们就是一段代码 确实 在网络的世界的 大部分对象无非就是一串"010101" 但它是怎么存储起来的 怎么做到随用随到 那么 这篇文章 我们去慢慢了解数据库是什么
什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它能高效地实现数据的插入、查询、更新、删除等操作,同时保证数据的安全性、完整性和一致性。简单来说,数据库就像一个系统化的 "电子档案柜",可以有序存储大量数据,并支持快速检索和管理。
数据库的核心作用是解决海量数据的存储与高效访问问题,广泛应用于网站、APP、企业管理系统、科研数据管理等场景(例如电商平台的商品信息、银行的账户记录等都依赖数据库存储)。
数据库的分类
数据库的分类方式有多种,最常见的是按数据模型(即数据的组织方式)划分,主要分为以下几类:
1. 关系型数据库(Relational Database, RDBMS)
-
核心特点:以 "表"(Table)为基本存储单位,表中的数据按行(记录)和列(字段)组织,表与表之间通过 "关系"(如主键、外键)关联,遵循 ACID 原则(原子性、一致性、隔离性、持久性),确保数据的严谨性。
-
代表产品:
- MySQL(开源,广泛用于 Web 开发)
- PostgreSQL(开源,支持复杂查询和扩展)
- Oracle(商业,功能强大,适合大型企业)
- SQL Server(微软产品,适合 Windows 环境)
-
适用场景:需要严格事务管理、数据关系复杂的场景(如金融交易、电商订单系统)。
2. 非关系型数据库(NoSQL)
NoSQL 并非 "没有 SQL",而是 "Not Only SQL",它不依赖传统的表结构,数据存储形式更灵活,适合处理海量非结构化或半结构化数据。常见类型包括:
-
键值型数据库(Key-Value Store)
- 特点:数据以 "键 - 值" 对形式存储,查询速度极快,结构简单。
- 代表:Redis(支持内存存储,常用于缓存、会话管理)、Memcached(轻量缓存数据库)。
- 适用场景:缓存、计数器、实时数据存储(如秒杀活动库存计数)。
-
文档型数据库(Document Database)
- 特点:数据以 "文档"(如 JSON、XML)形式存储,文档内可包含复杂结构,无需预先定义表结构(schema-less)。
- 代表:MongoDB(最流行的文档数据库,支持灵活查询)、CouchDB。
- 适用场景:内容管理系统(如博客、新闻)、用户画像存储(数据结构常变化)。
-
列族型数据库(Column-Family Store)
- 特点:数据按 "列族"(一组相关列)存储,适合读取大量行中的少数列,支持高并发写入。
- 代表:HBase(基于 Hadoop,适合海量数据存储)、Cassandra(分布式,高可用)。
- 适用场景:日志分析、时序数据存储(如监控数据、用户行为记录)。
-
图形数据库(Graph Database)
- 特点:以 "节点" 和 "边" 存储数据,专注于处理数据之间的复杂关系(如社交网络中的好友关系)。
- 代表:Neo4j、JanusGraph。
- 适用场景:社交网络分析、推荐系统、路径规划(如地图导航中的路线关系)。
3. 其他分类
- 时序数据库(Time-Series Database) :专门存储随时间变化的数据(如传感器数据、服务器监控指标),代表有 InfluxDB、Prometheus。
- 内存数据库(In-Memory Database) :数据主要存储在内存中,读写速度远超磁盘数据库,如 Redis(部分功能)、SAP HANA。
关系型数据库
一、核心原理:关系模型(Relational Model)
关系型数据库的底层理论基础是关系模型(由 IBM 的 E.F.Codd 于 1970 年提出),其核心思想是:
- 数据被组织成关系(Relation) ,即我们看到的 "表(Table)"
- 表中的每一行是一个元组(Tuple) ,代表一条记录(Record)
- 每一列是一个属性(Attribute) ,代表记录的一个字段(Field)
- 表与表之间通过键(Key) 建立关联,形成 "关系"
二、关键特性的深入解析
1. 结构化查询语言(SQL)
SQL(Structured Query Language)是关系型数据库的标准查询语言,可细分为:
- DDL(数据定义语言) :定义数据库结构,如
CREATE TABLE
(建表)、ALTER TABLE
(修改表)、DROP TABLE
(删表) - DML(数据操纵语言) :操作数据,如
INSERT
(插入)、UPDATE
(更新)、DELETE
(删除)、SELECT
(查询) - DCL(数据控制语言) :管理权限,如
GRANT
(授权)、REVOKE
(回收权限) - TCL(事务控制语言) :控制事务,如
COMMIT
(提交)、ROLLBACK
(回滚)
SQL 的强大之处在于支持复杂关联查询 (通过JOIN
连接多表)和聚合分析 (GROUP BY
+SUM/AVG
等函数)。
2. ACID 事务的深度理解
ACID 是关系型数据库保证数据可靠性的核心机制:
- 原子性(Atomicity) :事务是不可分割的最小单位,要么全执行,要么全不执行(例如转账时,扣款和到账必须同时成功或失败)。
- 一致性(Consistency) :事务执行前后,数据必须从一个合法状态转换到另一个合法状态(例如银行账户余额不能为负数)。
- 隔离性(Isolation) :多个事务并发执行时,彼此互不干扰,避免 "脏读""不可重复读""幻读" 等问题(通过隔离级别控制,如 Read Committed、Repeatable Read)。
- 持久性(Durability) :事务提交后,数据变更永久保存在磁盘中,即使系统崩溃也不会丢失(通过日志机制实现,如 WAL 预写日志)。
3. 约束(Constraints)机制
为保证数据完整性,关系型数据库提供多种约束:
- 主键(Primary Key) :唯一标识一条记录(非空且唯一),如用户表的
user_id
。 - 外键(Foreign Key) :关联两个表的字段,确保子表数据在父表中存在(如订单表的
user_id
必须对应用户表中已存在的id
)。 - 唯一约束(Unique) :字段值唯一(允许为空,但只能有一个空值),如用户表的
email
。 - 非空约束(Not Null) :字段值不能为
NULL
,如username
。 - 检查约束(Check) :限制字段值范围,如
age > 0
。
三、内部存储结构
关系型数据库的物理存储并非直接以 "表" 的形式存在,而是经过优化的文件结构:
- 数据文件 :存储实际数据,如 MySQL 的
.ibd
文件(InnoDB 引擎)、PostgreSQL 的堆表文件。 - 索引文件:加速查询(类似书籍目录),常见类型有 B + 树索引(MySQL 默认)、哈希索引、聚簇索引(数据与索引存储在一起)。
- 日志文件:包括事务日志(保证持久性)、错误日志、慢查询日志等。
以 InnoDB 引擎为例,数据按 "页(Page,默认 16KB)" 存储,表中的行数据和索引通过 B + 树组织,确保查询、插入、删除的高效性。
索引的关键作用
索引是关系型数据库性能优化的核心:
- 没有索引时,查询需全表扫描(逐行查找),效率极低。
- 有索引时,通过索引快速定位数据位置,类似用字典目录查单词。
- 但索引会增加写入(插入 / 更新 / 删除)的开销(需同步维护索引结构),因此需合理设计(避免过度索引)。
四、典型架构:客户端 - 服务器模型
关系型数据库通常采用 C/S 架构:
- 服务器端:运行数据库服务(如 mysqld 进程),负责数据存储、查询处理、事务管理等核心工作。
- 客户端 :通过 SQL 语句向服务器发送请求(如 MySQL 的
mysql
命令行工具、图形化工具 Navicat),接收并展示结果。
五、局限性
尽管关系型数据库功能强大,但也存在短板:
- 扩展性差:水平扩展(分布式部署)复杂,因为表间关系会导致数据同步困难。
- 灵活性低 :表结构(Schema)固定,修改需
ALTER TABLE
,不适合频繁变更的数据(如用户画像、日志)。 - 海量数据处理弱:面对 PB 级数据或高并发写入(如每秒 10 万次写入)时,性能容易瓶颈。
关系型和非关系型的区别
- 关系型数据库(RDBMS)和非关系型数据库(NoSQL)的核心区别源于数据存储结构、设计理念和适用场景的不同
1. 数据模型(最核心区别)
-
关系型数据库
采用表格结构(二维表) 存储数据,数据按行(记录)和列(字段)组织,表与表之间通过 "关系"(如主键、外键)关联,形成严谨的结构化数据模型。
例如:用户表(id, name)和订单表(order_id, user_id, amount)通过
user_id
关联,确保数据一致性。 -
非关系型数据库
摒弃固定表格结构,采用更灵活的存储格式,常见类型包括:
- 键值对(Key-Value):如 Redis(
key: value
) - 文档型(Document):如 MongoDB(JSON 格式文档)
- 列族型(Column-Family):如 HBase(按列族存储)
- 图形型(Graph):如 Neo4j(节点 + 边表示关系)
无需预先定义结构(schema-less),可直接存储非结构化或半结构化数据(如文本、图片、日志)。
- 键值对(Key-Value):如 Redis(
2. 事务与一致性
- 关系型数据库
严格遵循ACID 原则(原子性、一致性、隔离性、持久性),确保事务的可靠性。例如银行转账时,"扣款" 和 "到账" 必须同时成功或同时失败,避免数据不一致。 - 非关系型数据库
多数不支持完整 ACID,更强调CAP 理论 (一致性、可用性、分区容错性)中的 "可用性" 和 "分区容错性",适合对实时性要求高但可接受短暂数据不一致的场景(如社交软件的消息推送)。
部分 NoSQL(如 MongoDB 4.0+)支持有限事务,但仍不如关系型数据库严格。
3. 扩展性
- 关系型数据库
扩展以垂直扩展为主(升级服务器硬件,如增加 CPU、内存),水平扩展(多服务器分布式部署)较复杂,因为表间关系会增加数据同步难度。 - 非关系型数据库
天生支持水平扩展(通过分片、集群增加服务器节点),数据可分散存储在多台服务器,适合处理 PB 级海量数据(如电商平台的用户行为日志)。
4. 查询方式
- 关系型数据库
使用标准化的SQL 语言查询,支持复杂的多表关联查询(JOIN)、聚合函数(SUM/COUNT)等,适合需要深度数据分析的场景。 - 非关系型数据库
无统一查询语言,各产品有专属 API 或查询语法(如 MongoDB 的查询语句类似 JSON),不擅长多表关联查询,但单表(集合)查询效率更高。
5. 适用场景
类型 | 典型场景 | 代表产品 |
---|---|---|
关系型数据库 | 金融交易、电商订单、用户账户(强事务需求) | MySQL、Oracle、PostgreSQL |
非关系型数据库 | 社交数据、日志存储、实时缓存(高并发 / 灵活结构) | Redis、MongoDB、HBase |
范式(Normal form)简称NF
第一范式(1NF):原子性
- 本质:字段不可再分,即 "列不能再拆成多列"。
- 反例:
用户信息
字段存储 "张三,25, 北京"(用逗号分隔多个值),违反 1NF; - 正例:拆分为
姓名
、年龄
、城市
三个独立字段,每个字段仅存单一值。
2. 第二范式(2NF):完全依赖
- 前提 :满足 1NF,且表有复合主键(由多个字段组成的主键)。
- 本质 :非主键字段必须依赖整个主键,而不是主键的某一部分。
- 反例:表
学生选课
的主键是(学生ID, 课程ID)
,若包含学生姓名
(只依赖学生ID
),则违反 2NF; - 正例:
学生姓名
移到学生表
,学生选课
仅保留学生ID
、课程ID
、成绩
(成绩依赖整个复合主键)。
3. 第三范式(3NF):消除传递依赖
- 前提:满足 2NF。
- 本质:非主键字段之间不能有 "甲依赖乙,乙依赖主键" 的传递关系。
- 反例:表
员工
有员工ID
(主键)、部门ID
、部门地址
,其中部门地址
依赖部门ID
,形成传递依赖,违反 3NF; - 正例:
部门地址
移到部门表
,员工表
仅存员工ID
和部门ID
,通过关联查询获取部门地址。
4. BC 范式(BCNF):强化 3NF
- 场景:解决 3NF 中 "主属性依赖非主键" 的漏洞(主属性指主键中的字段)。
- 反例:表
教师授课
的主键是(教师ID, 课程ID)
,若规则为 "一名教师只能教一门课",则课程ID
依赖教师ID
(主属性依赖主属性的一部分),违反 BCNF; - 正例:拆分为
教师-课程
表(教师 ID→课程 ID)和授课记录
表(教师 ID, 课程 ID, 班级),确保主属性不依赖其他主属性。
5. 更高阶范式(4NF、5NF)
- 4NF :消除 "多值依赖"(一个字段对应多个独立值,且与其他字段无关)。例如,表
学生兴趣
中学生ID
对应多个兴趣
和多个社团
,兴趣与社团无关,需拆分为两个表。 - 5NF:消除 "连接依赖",适用于多表关联的极端复杂场景,实际业务中几乎不用。
目前为止全球前10的数据库有哪些
- Oracle:稳居榜首,是老牌的关系型数据库,由 Oracle 公司于 1983 年推出。其在企业级应用中广泛使用,具有运行稳定、功能齐全、性能优异等特点。
- MySQL:排名第 2,是开源的小型关系型数据库管理系统,体积小、速度快、使用灵活,被广泛应用在 Internet 上的中小型网站中。
- Microsoft SQL Server:排名第 3,是微软推出的功能全面的数据库,适用于中大型企业单位,在操作性和交互性上有很大优势。
- PostgreSQL:排名第 4,是开源的对象关系数据库管理系统,功能强大,支持多种操作系统,如 Linux、FreeBSD、OS X、Solaris 和 Microsoft Windows 等。
- MongoDB:排名第 5,是一种非关系型数据库,属于文档数据库,以 BSON 格式存储数据,常用于处理大量非结构化和半结构化数据。
- Snowflake:排名第 6,是一款基于云的数据分析型数据库,具有强大的弹性扩展能力和数据仓库功能,可无缝集成到其他 AWS 服务中。
- Redis:排名第 7,是一个开源的内存数据库,常用于缓存、消息队列、分布式锁等场景,读写速度极快。
- Elasticsearch:排名第 8,是一个分布式的搜索和分析引擎,主要用于全文搜索、日志分析等场景,基于 Lucene 构建。
- IBM Db2:排名第 9,是 IBM 推出的一系列关系型数据库管理系统,可在不同的操作系统平台上服务。
- SQLite:排名第 10,是一种轻型的嵌入式关系型数据库,常用于移动设备和嵌入式系统中,文件体积小,无需独立的服务器进程。
国产的创新数据库有哪些
- 人大金仓 KingbaseES:人大金仓的核心产品,具备高兼容、高可靠、高性能等特点,是唯一入选国家自主创新产品目录的数据库产品,在国家级、省部级实际项目中应用广泛。
- 达梦数据库 DM:达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,跨越多种软硬件平台,具有大数据管理与分析能力,高效稳定。
- 南大通用 GBase 8a:是支撑大数据快速分析的新型数据库,作为列存储的分析型数据库,通过新型存储结构、数据压缩等技术,大幅提高对海量数据进行统计分析的运算速度。
- 华为 GaussDB:企业级分布式数据库,兼容鲲鹏芯片、麒麟操作系统,通过信创认证,可提供高性能、高可靠的数据处理服务,适用于多种业务场景。
- 阿里云 OceanBase:是阿里云自研的分布式关系型数据库,具有高可用、强一致性等特点,在金融等领域有广泛应用,曾打破 TPC-C 基准测试世界纪录。
- 平凯星辰 TiDB:是一款开源分布式关系型数据库,具备水平扩展能力,支持在线事务处理与在线分析处理(HTAP),兼容性良好,可替代传统商业数据库。
总结
好了 这篇文章我们简单介绍了什么是数据库 很多人听到的MySQL 或者 SQL server 他们都称之为数据库 并且 在行业内 有单独的数据库工作 DBA 我们称之为数据库运维 但对于数据库的了解要求会高 并且也要了解其他的运维知识
今天是2025.7.31 是7月的最后一天 迎接8月的到来 去放手去做 去追求或者去爱 如果你想 也可以立马喝一瓶可乐 这一切取决你自己