Отже, ACID - це набір властивостей, які описують транзакцію.
1️⃣ Atomicity
Транзакція або виконується повністю (COMMIT), або не виконується взагалі (ROLLBACK).
2️⃣ Consistency
Після транзакції база має залишатися у валідному стані. Важливо розуміти, що валідний стан описується на рівні DB за допомогою інструментів, які перевіряють дані під час транзакцій:
constraints, foreign keys, unique indexes, checks...У реальному житті це завжди компроміс. Критичні правила краще залишати на рівні бази, а менш важливі валідації можна тримати на рівні application layer.
3️⃣ Isolation
Основна ідея, що транзакції не повинні заважати одна одній. Це теж компроміс, так як чим вищий рівень ізоляції тим менше аномалій при паралельних транзакціях, але менша паралельність.
Те що треба розуміти:
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
4️⃣ Durability
Якщо транзакція закомічена, база даних має гарантувати, що ці зміни були записані на диск.
Також, це часто запитують на інтервʼю тому про ACID я писав на сайті