在 Rust 中与数据库交互
1. 为何需要数据持久化
在当今时代,现代应用程序对数据的依赖程度极高,数据被很多人比喻为“新的石油”。从社交游戏、云存储到电子商务、医疗保健等各个领域,基于数据库的服务无处不在。这些服务都需要正确地存储和检索数据,所存储的数据必须易于检索,并且要保证数据的一致性和持久性。
数据库为构建基于数据的应用程序提供了坚实的基础,能够满足用户的期望。一般来说,数据库是表的集合,表是数据组织的基本单位。数据以表的形式组织,这主要适用于关系型数据库。而其他类型的数据库,如 NoSQL 和图数据库,则采用更灵活的文档模型来存储和组织数据。
表通常是现实世界中实体的表示,这些实体具有各种属性,对应表中的列。实体之间还可能存在关系,一个表中的列可以引用另一个表中的列。对数据库的更改通常使用结构化查询语言(SQL)来执行,SQL 查询还允许使用 JOIN 等子句跨多个表进行查询。
用户与基于数据库的应用程序交互时,常见的模式是 CRUD 模式,即创建(Create)、读取(Read)、更新(Update)和删除(Delete),这是用户通过应用程序对数据库执行的常见操作。
SQL 是一种声明式的数据库事务执行方式。事务是对数据库的一组修改操作,这些操作必须原子性地执行,即要么全部成功,要么在出现失败时全部不执行。在应用程序中编写数据库事务的简单方法是使用原始 SQL 查询,但更好的方法是使用对象关系映射(ORM)。ORM 是一种使用原生语言抽象和类型来访问数据库的技术,这些抽象和类型与 SQL 语法和语义几乎一一对应。许多主流语言都提供了用于执行 SQL 的高级库,允许使用原生语言编写查询,然后将其转换为原始 SQL 查询。例如,