初识数据库

初识数据库

前言

我们想了解 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月的到来 去放手去做 去追求或者去爱 如果你想 也可以立马喝一瓶可乐 这一切取决你自己

相关推荐
哥哥还在IT中15 分钟前
脚本统计MongoDB集合表数据量
数据库·mongodb
爱敲代码的TOM27 分钟前
手撕Redis源码1-数据结构实现
数据库·redis·缓存
孫治AllenSun37 分钟前
【Mysql】联合索引生效分析案例
java·数据库·mysql
蓝黑202038 分钟前
MySQL的case
数据库·mysql
书唐瑞40 分钟前
Percona pt-archiver 出现数据不对等
java·服务器·数据库
ALLSectorSorft43 分钟前
相亲小程序个人资料管理系统模块搭建
服务器·网络·数据库·python·sql
CHEN5_021 小时前
【Java面试题】缓存穿透
java·开发语言·数据库·redis·缓存
卍郝凝卍1 小时前
云服务器数据库
运维·服务器·数据库
不辉放弃1 小时前
Spark SQL 的详细介绍
数据库·pyspark·大数据开发·sparksql
zc.z2 小时前
Tomcat线程池、业务线程池与数据库连接池的层级约束关系解析及配置优化
服务器·数据库·tomcat