关系数据库的原子性

发布于:2023-01-16 ⋅ 阅读:(250) ⋅ 点赞:(0)

不久前,“原子”一词指的是无法进一步分裂的最小粒子。尽管我们已经发现原子本身是由更小的粒子组成,但该术语继续保留其原始含义。对于关系数据库而言,原子性(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 的存储引擎:

总结

在今天的文章中,我们了解了什么是数据库原子性以及如何在数据库实例中实施它。如果你对 Navicat Premium 感兴趣,可以免费试用 14 天!

往期回顾

Navicat 被投毒了 | 真相来了!

盗版引发设备瘫痪

Navicat 16.1 为OceanBase 社区版

Navicat 成为信通院数据库创新实验室成员

Navicat 学术伙伴计划 - 免费教育版申请

Navicat 技术智库 - 实战演练与各类热门问题解答

免费试用攻略 | Navciat 16 数据库管理工具


网站公告

今日签到

点亮在社区的每一天
去签到