← Назад к вопросам

Что такое сonsistency в ACID?

2.3 Middle🔥 201 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Consistency в ACID?

Consistency (Согласованность) в ACID — это **гарантия, что база данных переходит из одного согласованного состояния в другое**. Транзакция либо полностью выполняется и оставляет БД в корректном состоянии, либо откатывается полностью.

ACID расшифруется как

  • Atomicity — Атомарность (всё или ничего)
  • Consistency — Согласованность (корректное состояние)
  • Isolation — Изоляция (независимость транзакций)
  • Durability — Надёжность (данные сохранены навсегда)

Что значит согласованное состояние?

Согласованность означает, что все правила целостности и ограничения БД соблюдаются до и после транзакции:

  • Ограничения первичного ключа — нет дубликатов ID
  • Ограничения уникальности — no duplicates на unique колонках
  • Внешние ключи — ссылки указывают на существующие записи
  • Проверки (CHECK) — значения соответствуют условиям
  • Бизнес-правила — баланс не может быть отрицательным

Классический пример: Перевод денег

BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 'A';
UPDATE accounts SET balance = balance + 100 WHERE id = 'B';
COMMIT;

Что значит Consistency здесь:

  • Если транзакция завершается успешно: сумма денег в системе остаётся одной и той же
  • Если происходит ошибка на шаге 2: всё откатывается, оба счёта остаются в исходном состоянии
  • Никогда не может быть ситуации, когда снялись деньги со счёта A, но не попали на счёт B

Примеры нарушения Consistency

INSERT INTO users (email, name) VALUES ('john@example.com', 'John');
INSERT INTO users (email, name) VALUES ('john@example.com', 'Jane');

INSERT INTO orders (user_id, product) VALUES (999, 'Laptop');

CREATE TABLE users (
  id INT PRIMARY KEY,
  age INT CHECK (age >= 0)
);
INSERT INTO users VALUES (1, -5);

Consistency в Node.js с TypeORM

const queryRunner = dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();

try {
  const user = await queryRunner.manager.findOne(User, { where: { id: userId } });
  if (!user) throw new Error('User not found');

  user.balance -= amount;
  if (user.balance < 0) throw new Error('Insufficient funds');

  await queryRunner.manager.save(user);

  const transaction = new Transaction();
  transaction.user = user;
  transaction.amount = amount;
  await queryRunner.manager.save(transaction);

  await queryRunner.commitTransaction();
} catch (error) {
  await queryRunner.rollbackTransaction();
  throw error;
} finally {
  await queryRunner.release();
}

Consistency vs Atomicity

  • Atomicity — гарантирует выполнение (всё или ничего)
  • Consistency — гарантирует правила целостности данных
  • Вместе — если нарушено правило, вся транзакция откатывается

Ключевые моменты для интервью

  1. Consistency = правила целостности соблюдаются
  2. Включает ограничения БД и бизнес-правила
  3. Работает вместе с Atomicity
  4. Не путайте с Isolation — Consistency про правила, Isolation про независимость операций
Что такое сonsistency в ACID? | PrepBro