Комментарии (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 — гарантирует правила целостности данных
- Вместе — если нарушено правило, вся транзакция откатывается
Ключевые моменты для интервью
- Consistency = правила целостности соблюдаются
- Включает ограничения БД и бизнес-правила
- Работает вместе с Atomicity
- Не путайте с Isolation — Consistency про правила, Isolation про независимость операций