Navicat 博客

关系数据库的原子性 2021 年 3 月 30 日,由 Robert Gravelle 撰写

不久前,“原子”一词指的是无法进一步分裂的最小粒子。尽管我们已经发现原子本身是由更小的粒子组成,但该术语继续保留其原始含义。对于关系数据库而言,原子性(Atomicity)意味着数据库执行的操作(DML 或 DDL等)将是原子的。关系数据库通常提供的原子性单位是事务(Transaction)。为什么这很重要?原子性保证可以防止更新时仅更新了部分数据库,这比直接拒绝整系列的操作会引起更大的问题。在今天的文章中,我们将学习原子性是什么以及如何在你的数据库实例中实施它。

没有原子性(Atomicity)就不是 ACID

你可能已经听说过有关关系数据库的术语“ACID”。它代表“原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)”。它是数据库管理系统(DBMS)中的一个概念,它标识了一组用于保证数据库可靠性的标准属性。ACID 属性可确保所有数据库事务保持准确且一致,并支持从处理操作期间可能发生的故障中恢复。这样,几乎所有关系数据库都实现了它。

这是原子性出现的地方:

假设你正在执行数据库 UPDATE,将需要 10 秒钟来处理表中的所有行。随着更新的进行,电源突然熄灭!当恢复电源后,你读取数据时发现其中一些行已根据你的 SQL 语句进行了更新,而其余的行则没有。你现在可能觉得有些混乱!!

幸运的是,今天的现代数据库不可能发生这种情况,对吧?那就错了。

了解你的存储引擎

在许多情况下,你使用的数据库类型并不像使用的存储引擎那么重要。存储引擎是 DBMS 用于创建、读取、更新和删除(CRUD)数据的基础软件组件。大多数数据库支持几种不同类型的存储引擎。例如,MySQL 当前提供以下存储引擎:

  • InnoDB
  • MyISAM
  • Memory
  • CSV
  • Archive
  • Blackhole
  • NDB
  • Merge
  • Federated
  • Example

你不会受限于要对整个服务器或模式使用相同的存储引擎。你可以在表级别指定存储引擎。

数据库系统存在各种各样的存储引擎,因为某些存储引擎在某些操作和环境中有效,而在其他操作和环境中则会无效。考虑并选择哪种存储引擎最适合你的使用模式时,这一点很重要。

回到我们的例子,如果你使用的是 MyISAM 引擎,可能会遇到麻烦,因为 MyISAM 不会强制执行原子性。因此,可以部分应用单个更改,从而影响预期集中的某些行,而其余行则不受影响。另一方面,InnoDB 存储引擎可以确保将所有 UPDATE 应用于完整的行集。如果发生错误或由于某种原因导致事务中断,它将不会将 UPDATE 应用于任何行。

在 Navicat 中选择存储引擎

Navicat 表设计器的“选项”选项卡上有一个下拉菜单,可轻松为数据库中的每个表选择存储引擎。以下是在 Navicat Premium 中 MySQL 的存储引擎:

storage_engine (135K)

总结

在今天的文章中,我们了解了什么是数据库原子性以及如何在数据库实例中实施它。

如果你对 Navicat Premium 感兴趣,可以免费试用 14 天!


Rob Gravelle 居住在加拿大渥太华,是一名有 20 多年经验的 IT 专家。过往,Rob 曾为与情报有关的组织(如加拿大边境服务局和各种商业组织)构建系统。如果你想雇用 Rob,可以发送电子邮件至 rgconsulting(AT)robgravelle(DOT)com。在业余时间,Rob 是一名出色的吉他演奏家,并发行了几张 CD

Navicat 文章
频道条目
分享
文章归档