ACID (англ. Atomicity, Consistency, Isolation, Durability) — це набір властивостей, що гарантують надійну роботу транзакцій бази даних: атомарність, узгодженість, ізольованість, довговічність. В контексті баз даних, послідовність операцій з базою даних, яка задовольняє властивостям ACID, можна розглядати як одну логічну операцію над даними. Така послідовність операцій називається транзакцією. Наприклад, переказ коштів з одного банківського рахунку на інший містить численні операції, але є єдиною транзакцією.

1983 року Андреа Рейтер[en] і Тео Хардер[en] ввели акронім ACID[1], ґрунтуючись на вимогах[2], які сформулював раніше науковець Джим Грей.

Вимоги ред.

За Рейтером та Хардером, вимоги до цих чотирьох властивостей наступні:

Atomicity — Атомарність ред.

Транзакції часто містять в собі багато операцій. Атомарність (англ. Atomicity) гарантує, що жодна транзакція не буде виконана частково. Будуть або виконані всі операції, що беруть участь у транзакції, або не виконано жодної. Якщо протягом роботи однієї з операцій виникне помилка і операцію буде відхилено, то будуть відхилені також усі інші зміни, здійснені в межах транзакції. Система має бути атомарною у кожній ситуації, враховуючи відключення електроенергії, помилки та збої[3]. Гарантія атомарності перешкоджає частковому оновленню бази даних, яке насправді може спричинити ще більші проблеми, аніж оновлення всієї бази в межах однієї транзакції.

Прикладом атомарної транзакції є переказ грошей з рахунку на рахунок, який проходить двома операціями: зняття грошей з першого рахунку та збереження їх на другому. Виконання цих операцій в атомарній транзакції забезпечує узгодженість даних бази, тобто гроші не віднімуться та не зарахуються, якщо одна з цих двох операцій зазнає невдачі[4].

Consistency — Узгодженість ред.

Відповідно до вимоги узгодженості (англ. Consistency), система має перебувати в узгодженому, несуперечливому стані до початку дії транзакції і по її завершенню. При цьому вона може перебувати в неузгодженому стані протягом виконання транзакції, проте ця неузгодженість не буде видимою за межами транзакції завдяки іншим властивостям — атомарності та ізольованості.

Таким чином, узгодженість гарантує інваріантивність бази даних: будь-які дані, записані в базу, мають відповідати усім визначеним правилам, враховуючи обмеження, каскади, тригери та будь-яку їхню комбінацію. Це запобігає пошкодженню бази даних некоректною транзакцією, але не гарантує правильність транзакції. Посилальну цілісність гарантує відношення унікального ключа до зовнішнього[5].

Наприклад, при переведенні коштів з рахунку на рахунок, кошти можна спочатку зняти з першого рахунку, після чого нараховувати на другий. Відповідно, після зняття коштів, але до їх нарахування система перебуває в неузгодженому стані: коштів немає на жодному з рахунків. Але після завершення транзакції повна сума перебуватиме на другому (або першому у випадку скасування транзакції) рахунку.

Isolation — Ізольованість ред.

Ізольованість (англ. Isolation) означає, що жодні проміжні зміни не будуть видимі за межами транзакції аж до її завершення. Питання ізоляції стає актуальним при одночасній роботі багатьох транзакцій з тими самими даними. За цією вимогою, якщо дві транзакції намагатимуться змінити одні й ті самі дані, то одну з них буде відхилено або призупинено до завершення другої[6].

Durability — Довговічність ред.

Довговічність (англ. Durability) гарантує, що незалежно від інших проблем після відновлення працездатності системи результати завершених транзакцій будуть збережені. Іншими словами, якщо користувач отримав повідомлення про успішне завершення транзакції, то він може бути впевнений, що дані будуть збережені та відновлені у випадку збоїв.

Примітки ред.

  1. Haerder, T.; Reuter, A. (1983). Principles of transaction-oriented database recovery. ACM Computing Surveys. 15 (4): 287. doi:10.1145/289.291.
  2. Gray, Jim (September 1981). The Transaction Concept: Virtues and Limitations (PDF). Proceedings of the 7th International Conference on Very Large Databases. Cupertino, CA: Tandem Computers. с. 144—154. Архів оригіналу (PDF) за 13 листопада 2008. Процитовано 19 квітня 2018.
  3. Atomic operation. webopedia.com. Webopedia. Архів оригіналу за 27 листопада 2020. Процитовано 23 березня 2011. An operation during which a processor can simultaneously read a location and write it in the same bus operation. This prevents any other processor or I/O device from writing or reading memory until the operation is complete.
  4. Amsterdam, Jonathan. Atomic File Transactions, Part 1. O'Reilly. Архів оригіналу за 3 березня 2016. Процитовано 28 лютого 2016.
  5. C. J. Date, "SQL and Relational Theory: How to Write Accurate SQL Code 2nd edition", O'reilly Media, Inc., 2012, pg. 180.
  6. "Isolation Levels in the Database Engine", Technet, Microsoft, https://technet.microsoft.com/en-us/library/ms189122(v=SQL.105).aspx [Архівовано 3 вересня 2017 у Wayback Machine.]

Див. також ред.

Література ред.