Mysql

Mysql ACID 是否兼容?

  • November 7, 2021

根據 Postgresql,Mysql 不是符合 ACID 的嗎?在一些部落格中,我看到 Mysql 不符合 ACID。這有多真實?

我們先不考慮這裡的複制,讓我們考慮一個獨立的,Mysql ACID 的效率如何?

在我對 Mysql-ACID 的理解中。

A - 原子性(如果一個事務失敗必須回滾,則應全部送出一組事務。是意味著所有事務都已送出,不意味著即使一個失敗也必須回滾)。

Mysql 中支持的 IE 功能是。

  • 開始交易;….. 犯罪 ;
  • 自動送出=1;

C - 一致性。

(PK、FK、UK、非空)。它遵守數據庫的關係和約束。實例一個父鍵只有在它的子鍵被刪除時才能被刪除。

我 - 隔離。使用者及其送出狀態之間的隔離。

讀可重複讀未送出讀已送出序列化

D - 耐用性。在數據庫崩潰的情況下,innodb 通過從 iblog 文件應用送出的事務並丟棄未送出的事務來恢復數據庫。

點擊此處查看此問題的來源。 - 是因為部落格是@2001 創建的嗎?

2017 年6 月 30 日更新:根據“Evan Carroll”的回复,我親自測試了5.7.18-enterprise 上的部落格實驗。實驗得到的結果似乎是Mysql is Not an ACID Compliant。

我不認為允許可重複讀取中的幻像寫入滿足任何 ACID 合規性。

有關更多資訊,請參閱此部落格條目。

如果您使用 InnoDB 或類似的儲存引擎,那麼它應該符合 ACID(參考:https ://en.wikipedia.org/wiki/InnoDB )。myISAM,舊的預設值,仍然非常常用,絕對符合 ACID。如果您將兩者混合使用(您可能會發現更簡單的表類型性能更好,並且對於可以並且將再次複製的易失性數據是可以接受的,例如 ETL 流程的暫存表),那麼您的解決方案將不完全兼容。

ACID 合規性的一個重要警告是,出於性能原因,大多數數據庫使用不保證“I”部分的隔離級別 - 這在 ANSI SQL 規範內。要提供適當的隔離,您需要保證事務是可序列化的,這是一些 DB 甚至不支持的隔離級別。例如 MySQL+InnoDB 預設為“可重複讀取”,而 MS SQL Server 預設為稍微嚴格的“已送出讀”,兩者都提供“可序列化”但不是預設值。為什麼不總是支持並且通常不是預設設置?性能:完全隔離要求會顯著限制並發性。

有幾篇關於這個主題的好文章。例如, http://www.bailis.org/blog/when-is-acid-acid-rarely/是一個簡短且內容豐富的地方,可以從評論中的一些有趣討論開始。

引用自:https://dba.stackexchange.com/questions/177569