> Что такое транзакции в базах данных и каковы их основные свойства (JavaScript)
Уровень: junior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы
Компании: QueenInteractiveGamesLtd
Стек: Node.js, JavaScript
> Пример ответа
Транзакция в базах данных - это логическая единица работы, состоящая из одной или нескольких операций (например, чтения, записи, обновления данных), которая выполняется как единое целое. Если любая часть транзакции завершается с ошибкой, вся транзакция откатывается, возвращая базу данных в исходное состояние. Это гарантирует целостность данных, особенно в многопользовательских системах.
Основные свойства транзакций описываются аббревиатурой ACID:
-
Atomicity (Атомарность) - транзакция выполняется полностью или не выполняется вовсе. Никаких частичных изменений.
-
Consistency (Согласованность) - после завершения транзакции база данных переходит из одного согласованного состояния в другое. Все ограничения целостности (например, уникальность ключей) соблюдены.
-
Isolation (Изолированность) - параллельные транзакции не влияют друг на друга. Промежуточные результаты одной транзакции не видны другим до её завершения. Уровни изоляции (Read Uncommitted, Read Committed, Repeatable Read, Serializable) регулируют степень этой изоляции.
-
Durability (Надёжность) - после успешного завершения транзакции её результаты сохраняются даже при сбое системы (например, отключении питания). Обычно реализуется через журналирование.
На практике, в Node.js с использованием PostgreSQL через библиотеку pg, транзакции управляются так:
JAVASCRIPTconst { 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 откатывает их при ошибке, обеспечивая атомарность.
> Похожие задачи по JavaScript
Какие тактические шаблоны DDD вы знаете и применяли
Что такое нормализация и денормализация баз данных
Приходилось ли менять уровни изоляции транзакций?
Какие данные кэшируются и как работает кэширование
> Похожие задачи по frontend
Использовал ли ты Zustand
В каком порядке вызываются хуки в родительских и дочерних компонентах Angular
Приходилось ли менять уровни изоляции транзакций?
Какие данные кэшируются и как работает кэширование
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью