初识数据库

初识数据库

前言

我们想了解 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),可直接存储非结构化或半结构化数据(如文本、图片、日志)。
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的数据库有哪些

  1. Oracle:稳居榜首,是老牌的关系型数据库,由 Oracle 公司于 1983 年推出。其在企业级应用中广泛使用,具有运行稳定、功能齐全、性能优异等特点。
  2. MySQL:排名第 2,是开源的小型关系型数据库管理系统,体积小、速度快、使用灵活,被广泛应用在 Internet 上的中小型网站中。
  3. Microsoft SQL Server:排名第 3,是微软推出的功能全面的数据库,适用于中大型企业单位,在操作性和交互性上有很大优势。
  4. PostgreSQL:排名第 4,是开源的对象关系数据库管理系统,功能强大,支持多种操作系统,如 Linux、FreeBSD、OS X、Solaris 和 Microsoft Windows 等。
  5. MongoDB:排名第 5,是一种非关系型数据库,属于文档数据库,以 BSON 格式存储数据,常用于处理大量非结构化和半结构化数据。
  6. Snowflake:排名第 6,是一款基于云的数据分析型数据库,具有强大的弹性扩展能力和数据仓库功能,可无缝集成到其他 AWS 服务中。
  7. Redis:排名第 7,是一个开源的内存数据库,常用于缓存、消息队列、分布式锁等场景,读写速度极快。
  8. Elasticsearch:排名第 8,是一个分布式的搜索和分析引擎,主要用于全文搜索、日志分析等场景,基于 Lucene 构建。
  9. IBM Db2:排名第 9,是 IBM 推出的一系列关系型数据库管理系统,可在不同的操作系统平台上服务。
  10. SQLite:排名第 10,是一种轻型的嵌入式关系型数据库,常用于移动设备和嵌入式系统中,文件体积小,无需独立的服务器进程。

国产的创新数据库有哪些

  • 人大金仓 KingbaseES:人大金仓的核心产品,具备高兼容、高可靠、高性能等特点,是唯一入选国家自主创新产品目录的数据库产品,在国家级、省部级实际项目中应用广泛。
  • 达梦数据库 DM:达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,跨越多种软硬件平台,具有大数据管理与分析能力,高效稳定。
  • 南大通用 GBase 8a:是支撑大数据快速分析的新型数据库,作为列存储的分析型数据库,通过新型存储结构、数据压缩等技术,大幅提高对海量数据进行统计分析的运算速度。
  • 华为 GaussDB:企业级分布式数据库,兼容鲲鹏芯片、麒麟操作系统,通过信创认证,可提供高性能、高可靠的数据处理服务,适用于多种业务场景。
  • 阿里云 OceanBase:是阿里云自研的分布式关系型数据库,具有高可用、强一致性等特点,在金融等领域有广泛应用,曾打破 TPC-C 基准测试世界纪录。
  • 平凯星辰 TiDB:是一款开源分布式关系型数据库,具备水平扩展能力,支持在线事务处理与在线分析处理(HTAP),兼容性良好,可替代传统商业数据库。

总结

好了 这篇文章我们简单介绍了什么是数据库 很多人听到的MySQL 或者 SQL server 他们都称之为数据库 并且 在行业内 有单独的数据库工作 DBA 我们称之为数据库运维 但对于数据库的了解要求会高 并且也要了解其他的运维知识

今天是2025.7.31 是7月的最后一天 迎接8月的到来 去放手去做 去追求或者去爱 如果你想 也可以立马喝一瓶可乐 这一切取决你自己

相关推荐
gsfl22 分钟前
Redis分布式锁
数据库·redis·分布式
Li zlun1 小时前
MySQL 配置管理与日志系统完全指南:从基础到高级优化
数据库·mysql
wzg20162 小时前
vscode 配置使用pyqt5
开发语言·数据库·qt
老朋友此林3 小时前
MongoDB GEO 项目场景 ms-scope 实战
java·数据库·spring boot·mongodb
极限实验室4 小时前
如何使用 INFINI Gateway 对比 ES 索引数据
数据库
Raymond运维5 小时前
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
linux·运维·数据库·mysql
养生技术人6 小时前
Oracle OCP认证考试题目详解082系列第45题
运维·数据库·sql·oracle·开闭原则·ocp
奥尔特星云大使6 小时前
mysql主从配置(保姆级)
数据库·mysql·主从复制
BD_Marathon6 小时前
【MySQL】SQL的分类
数据库·sql·mysql