• 关系数据库的原子性


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

  • 相关阅读:
    7-2 友元类Cvector 武汉理工大学
    为什么国家政府发的国债,被央行自己印的钱大量购买时,利率会降低呢?
    01目标检测-问题引入
    Stable Diffuse AI 绘画 之 ControlNet 插件及其对应模型的下载安装
    数据结构:树
    [note] 拉-曼-Raman spectra
    (四)模型训练保存与加载
    【字节跳动实习面经(测试开发岗 一面)四个字:破涕为笑】
    RabbitMQ 延时消息实现方式
    【Windows系统5分钟搭建Linux环境】
  • 原文地址:https://blog.csdn.net/weixin_53935287/article/details/126364158