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 文章
頻道記錄
分享
部落格封存檔