Menu
CoddyTech

数据库是什么?

数据库是存储在计算机上、经过组织的数据集合,让程序能够快速、安全地查找、添加、修改和删除数据。它由一种叫作数据库管理系统(DBMS)的软件来管理,比如 PostgreSQL、MySQL、SQLite 或 MongoDB。

作者 Kevin Spektor, 联合创始人兼 CTO

更新于 2026年9月24日

当你登录一个网站时,网站需要在几百万个账号中找到你的账号,核对密码并加载你的设置,而这一切都要在几毫秒内完成。它不会打开一个文本文件逐行读取,而是向数据库发送 SELECT * FROM users WHERE email = 'ana@example.com' 这样的请求,数据库借助索引直接跳到正确的那一行,就像书末的索引一样。

数据库是如何工作的

两个部分协同工作。数据库是数据本身,按照固定的结构组织。数据库管理系统(DBMS)是把这些数据存进文件、保证数据一致并响应请求的程序。PostgreSQL、MySQL 和 SQLite 都是 DBMS;而你的客户名单就是数据库。

在关系型数据库中,数据存放在表里。每张表有列(姓名、国家、积分)和行(每个用户一行)。一个请求会经过以下步骤:

  1. 你的程序发送一条查询,通常用 SQL(结构化查询语言)编写。
  2. DBMS 解析这条查询,并规划如何作答:需要读取哪些表,能否借助索引跳过大部分行。
  3. 它以固定大小的页从磁盘读取数据(SQLite 默认每页 4,096 字节,PostgreSQL 为 8 KB),并把常用的页保留在内存中。
  4. 它对行进行筛选、排序和合并,然后返回结果。

Python 自带 SQLite,所以你可以直接在这里运行一个真正的数据库:

Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5

程序从来没有说明要怎么搜索。它只描述想要的结果,由 DBMS 决定如何得到它。这就是查询数据库和对列表写循环之间最主要的区别。

数据库的类型

类型数据的存储形式示例典型用途
关系型(SQL)由行和列组成、通过键相互关联的表PostgreSQL、MySQL、SQLite、Oracle、SQL Server用户、订单、支付:大多数应用
文档型类似 JSON 的文档MongoDB、Firestore、CouchDB字段因记录而异的数据
键值型通过一个键查找的值Redis、DynamoDB缓存、会话、计数器
宽列型列可灵活变化、分布在多台服务器上的行Cassandra、HBase极高的写入量
图数据库节点以及节点之间的关系Neo4j社交网络、推荐系统
时序数据库按时间索引的测量值InfluxDB、TimescaleDB监控指标、传感器读数
向量数据库数字列表(嵌入向量)pgvector、Pinecone、MilvusAI 功能中的相似度搜索

所有非关系型的数据库常被统称为 NoSQL。关系型数据库仍然是大多数应用的默认选择,因为表、约束和 SQL 能很好地解决各种各样的问题。很多产品还会把不同类型结合起来:PostgreSQL 可以存储 JSON 文档,pgvector 又为它加上了向量搜索。

事务:要么全部成功,要么全部不做

把钱从 Ana 转给 Ben 需要两处修改:给 Ben 加钱,从 Ana 扣钱。如果程序在两步之间崩溃,钱就会凭空多出来。事务把多处修改打包在一起,要么全部保存,要么一个都不保存。在下面的例子中,第二处修改违反了一条规则(余额不能低于零),所以数据库把第一处修改也撤销了:

transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}

给 Ben 加上的 40 又被收了回去,所以总数仍然对得上。关系型数据库为事务承诺了四个特性,合称 ACID:原子性(要么全做,要么全不做)、一致性(CHECK 之类的规则始终成立)、隔离性(两个用户同时执行事务时,看不到对方做到一半的修改)和持久性(修改一旦保存,即使崩溃或断电也不会丢失)。

数据库、电子表格和文件的区别

文本或 CSV 文件电子表格数据库
数据规模取决于程序能加载多少Excel 每个工作表 1,048,576 行数十亿行
多人同时写入不支持有限支持支持,依靠锁和事务
查找一条记录读取整个文件筛选或搜索通过索引查找
数据规则没有可选的数据验证类型、约束、外键
查询数据自己写代码公式SQL 或查询 API

电子表格很适合一个人查看几千行数据。一旦有多个程序或用户同时写入数据,或者数据必须遵守规则,数据库才是合适的工具。

数据库如何保护数据

DBMS 在改动数据文件之前,会先把每一处修改写入日志(预写式日志),所以崩溃之后可以重放或撤销未完成的工作。PostgreSQL 可以为每个 8 KB 的页存储一个校验和,当故障硬盘返回损坏的数据时报告校验失败。用户和权限决定谁可以读取或修改哪些表,复制机制则在其他服务器上保留数据副本。程序还必须以参数的形式传入用户输入,就像上面的 ? 占位符那样,绝不能把它直接拼接进 SQL 文本,否则就会遭到 SQL 注入攻击。

常见误解

  • “SQL 就是数据库。” SQL 是一种语言。PostgreSQL、MySQL 和 SQLite 是能理解这种语言的数据库。
  • “NoSQL 就是完全不用 SQL。” 这个词通常被理解为“不仅仅是 SQL”,而且有几种 NoSQL 数据库的查询语言看起来很像 SQL,比如 Cassandra 的 CQL。
  • “数据库一定是一台大服务器。” SQLite 只是一个文件,程序直接打开它即可,根本不需要服务器。每部 Android 和 iOS 手机里都运行着它。
  • “数据放进数据库就永远安全了。” 数据库能防范崩溃,却防不了有人误执行 DELETE。备份仍然必不可少。

下一步学什么

SQL 课程从第一条 SELECT 开始教你写查询。SQLite 文档介绍了接下来的内容:SQLite 是什么、创建表、索引以及防止 SQL 注入。想了解数据在磁盘上是如何排布的,可以阅读字节是什么;校验和则解释了如何发现损坏的页。

常见问题

用简单的话说,数据库是什么?

数据库是程序存放信息的地方,让它之后能快速找回这些信息。可以把它想象成一个带有完美索引的文件柜:你要“上周的所有订单”,即使有几百万条记录,也能在几毫秒内拿到答案。

数据库有哪些例子?

你手机里的联系人就存储在数据库中:Android 和 iOS 都自带 SQLite。银行把客户账户保存在 Oracle 或 PostgreSQL 这样的数据库里,维基百科则把文章存储在 MariaDB 中。网店把商品、顾客和订单保存在相互关联的表里。

数据库有哪四种类型?

并没有官方规定的四种。最常被提到的四种是:关系型数据库(表和 SQL)、文档数据库(类似 JSON 的记录)、键值存储(通过键查找值)和图数据库(节点和关系)。较老的教材还会列出层次型数据库和网状数据库。

最常用的 5 种数据库是哪些?

多年来,Oracle、MySQL、Microsoft SQL Server、PostgreSQL 和 MongoDB 一直占据 DB-Engines 流行度排行榜的前五名。在开发者中,自 2023 年起 PostgreSQL 一直是 Stack Overflow 开发者调查中使用最多的数据库;而 SQLite 是部署最广泛的数据库,因为手机和浏览器里都内置了它。

数据库和 DBMS 有什么区别?

数据库是数据本身,以表或文档的形式组织起来。DBMS 是把这些数据存到磁盘上并响应数据请求的软件,比如 PostgreSQL 或 MySQL。人们经常把两者都叫作“数据库”。

使用数据库必须学 SQL 吗?

对于关系型数据库来说,是的:你要用 SQL 来创建表、查询数据,而它的基础只需几天就能学会。很多程序会使用替你生成 SQL 的库,但懂 SQL 能让你更容易理解这个库在做什么,以及某个查询为什么慢。

Coddy 编程语言插图

和 Coddy 一起学编程

开始