0Pricing
SQL Academy · Урок

Свойства ACID и аномалии

Повторите атомарность, согласованность, изоляцию и долговечность, а также четыре классические аномалии: грязное чтение, неповторяемое чтение, фантомное чтение и потерянное обновление

«Свойства ACID и аномалии» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

ACID

Транзакция надежна, если она:

  • Атомарна — выполняется полностью или не выполняется вовсе
  • Согласована — переводит базу данных из одного допустимого состояния в другое
  • Изолирована — параллельные транзакции не мешают друг другу
  • Долговечна — после COMMIT данные сохраняются даже при сбое

Транзакция в SQL

Объединяйте операции между BEGIN и COMMIT:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- If anything fails, ROLLBACK leaves both rows unchanged.

Атомарность в действии

Если второй UPDATE завершается с ошибкой, первая операция откатывается — деньги не теряются частично:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Crash here, or ROLLBACK: account 1 is unchanged.

Согласованность

Ограничения (NOT NULL, CHECK, FK) проверяются при фиксации. Транзакция, которая оставила бы базу данных в недопустимом состоянии, завершается с ошибкой:

BEGIN;
INSERT INTO orders (user_id, total) VALUES (999, 100);  -- FK fails on commit if user 999 doesn't exist.
COMMIT;
-- ERROR: insert or update violates foreign key constraint
-- ROLLBACK happens automatically.

Изоляция: почему это важно

Без изоляции две параллельные транзакции могут исказить представление данных друг для друга. Классические аномалии:

  • Грязное чтение — чтение незафиксированных данных
  • Неповторяемое чтение — один и тот же запрос возвращает разные строки
  • Фантомное чтение — в середине транзакции появляются новые строки
  • Потерянное обновление — две операции обновления затирают результаты друг друга

Грязное чтение

Чтение строки, которую другая транзакция изменила, но еще не зафиксировала. PostgreSQL предотвращает это на всех уровнях изоляции.

Неповторяемое чтение

Вы читаете строку 1, другая транзакция фиксирует обновление строки 1, а затем Вы читаете ее снова — значение изменилось.

Фантомное чтение

Вы дважды выполняете SELECT COUNT(*) в одной транзакции. Между вызовами другая транзакция фиксирует INSERT — при втором подсчете результат больше.

Потерянное обновление

Две транзакции читают balance=100, обе записывают balance=balance-50 и обе фиксируют изменения — одно из уменьшений на 50 теряется.

Долговечность

После возврата из COMMIT изменение записано на диск или реплицировано — в зависимости от настроек. Сбой через миллисекунду не приведет к его потере. PostgreSQL обеспечивает долговечность с помощью WAL (журналирования с опережающей записью).

Автоматическая фиксация

По умолчанию каждый оператор является отдельной транзакцией:

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Implicitly: BEGIN; statement; COMMIT;

SAVEPOINT

Частичный откат внутри транзакции:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
SAVEPOINT before_step2;
UPDATE accounts SET balance = balance + 100 WHERE id = 999;
-- ERROR — but we can recover:
ROLLBACK TO SAVEPOINT before_step2;
-- continue
COMMIT;

Итоги

Транзакции — это страховочная сетка реляционных баз данных.

  • ACID: атомарность, согласованность, изоляция, долговечность
  • Четыре классические аномалии
  • BEGIN ... COMMIT или ROLLBACK
  • SAVEPOINT для частичного отката

Быстрая проверка

Какая аномалия возникает, когда две транзакции читают одно и то же значение, изменяют его и обе фиксируют изменения?

Часто задаваемые вопросы

Урок «Свойства ACID и аномалии» бесплатный?

Да — полный текст урока «Свойства ACID и аномалии» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Свойства ACID и аномалии»?

Повторите атомарность, согласованность, изоляцию и долговечность, а также четыре классические аномалии: грязное чтение, неповторяемое чтение, фантомное чтение и потерянное обновление Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Свойства ACID и аномалии»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Свойства ACID и аномалии
  2. Уровни изоляции: READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  3. Взаимные блокировки: обнаружение и предотвращение
  4. Оптимистическая и пессимистическая блокировка
← Назад к SQL Academy