> Что такое транзакции в базах данных и каковы их основные свойства (JavaScript)

Уровень: junior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы

Компании: QueenInteractiveGamesLtd

Стек: Node.js, JavaScript

> Пример ответа

Транзакция в базах данных - это логическая единица работы, состоящая из одной или нескольких операций (например, чтения, записи, обновления данных), которая выполняется как единое целое. Если любая часть транзакции завершается с ошибкой, вся транзакция откатывается, возвращая базу данных в исходное состояние. Это гарантирует целостность данных, особенно в многопользовательских системах.

Основные свойства транзакций описываются аббревиатурой ACID:

  • Atomicity (Атомарность) - транзакция выполняется полностью или не выполняется вовсе. Никаких частичных изменений.

  • Consistency (Согласованность) - после завершения транзакции база данных переходит из одного согласованного состояния в другое. Все ограничения целостности (например, уникальность ключей) соблюдены.

  • Isolation (Изолированность) - параллельные транзакции не влияют друг на друга. Промежуточные результаты одной транзакции не видны другим до её завершения. Уровни изоляции (Read Uncommitted, Read Committed, Repeatable Read, Serializable) регулируют степень этой изоляции.

  • Durability (Надёжность) - после успешного завершения транзакции её результаты сохраняются даже при сбое системы (например, отключении питания). Обычно реализуется через журналирование.

На практике, в Node.js с использованием PostgreSQL через библиотеку pg, транзакции управляются так:

JAVASCRIPT
const { Pool } = require('pg');
const pool = new Pool();
async function transferFunds(fromId, toId, amount) {
const client = await pool.connect();
try {
await client.query('BEGIN');
await client.query('UPDATE accounts SET balance = balance - $1 WHERE id = $2', [amount, fromId]);
await client.query('UPDATE accounts SET balance = balance + $1 WHERE id = $2', [amount, toId]);
await client.query('COMMIT');
} catch (err) {
await client.query('ROLLBACK');
throw err;
} finally {
client.release();
}
}

Здесь BEGIN начинает транзакцию, COMMIT фиксирует изменения, а ROLLBACK откатывает их при ошибке, обеспечивая атомарность.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью