Что такое ACID в SQL

Свойство ACID (Atomicity, Consistency, Isolation, Durability) — это набор требований, гарантирующих надежное выполнение транзакций в реляционных базах данных. Эти принципы обеспечивают корректность обработки данных даже в случае сбоев или одновременного выполнения нескольких операций.

Компоненты ACID

1. Атомарность (Atomicity)

Гарантирует, что транзакция либо выполняется полностью, либо не выполняется вовсе. Если одна из операций внутри транзакции не может быть выполнена, все изменения откатываются.

Пример атомарности с COMMIT и ROLLBACK

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

Если одно из обновлений не удастся, ROLLBACK отменит всю транзакцию.

2. Согласованность (Consistency)

Обеспечивает, что данные переходят из одного допустимого состояния в другое. Любая транзакция должна сохранять целостность данных, определенную ограничениями базы данных.

Пример нарушения согласованности

UPDATE orders SET total_amount = -50 WHERE id = 1;

Если total_amount не может быть отрицательным, база данных должна предотвратить такую операцию.

3. Изолированность (Isolation)

Обеспечивает независимость выполнения транзакций, предотвращая их взаимное влияние. Уровни изоляции SQL (READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE) регулируют степень взаимодействия транзакций.

Пример установки уровня изоляции

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Этот уровень предотвращает появление аномалий конкурентного доступа.

4. Долговечность (Durability)

Гарантирует, что после фиксации транзакции (COMMIT) изменения сохраняются в базе данных даже в случае сбоя системы.

После выполнения этой команды изменения записываются на диск и не могут быть потеряны.

ACID в практике баз данных

Большинство реляционных СУБД (например, MySQL, PostgreSQL, SQL Server, Oracle) поддерживают ACID. Однако для обеспечения высокой производительности некоторые NoSQL-решения могут ослаблять соблюдение этих свойств.