Назад к вопросам
Middle
20
Если транзакция откатилась, сохранится ли запись в таблице логов, сделанная через обычный INSERT?
Компании, где спрашивали
AltDev
Ответ от нейросети
sobes.tech AI
Если транзакция откатывается, то все изменения, сделанные внутри этой транзакции, включая INSERT в таблицу логов, также будут отменены и не сохранятся в базе данных.
Это связано с тем, что операции в рамках транзакции являются атомарными: либо все изменения фиксируются (commit), либо все отменяются (rollback).
Если нужно сохранить запись в лог независимо от отката основной транзакции, то обычно используют:
- Внешние механизмы логирования (например, запись в файл или отдельную систему логов).
- Отдельные транзакции для логирования, которые коммитятся независимо.
Пример:
BEGIN TRANSACTION;
INSERT INTO main_table VALUES (...);
-- Логируем в отдельной транзакции
BEGIN TRANSACTION;
INSERT INTO log_table VALUES (...);
COMMIT TRANSACTION;
-- Если основной транзакции сделать ROLLBACK, запись в log_table останется
ROLLBACK TRANSACTION;
Таким образом, обычный INSERT в таблицу логов внутри откатываемой транзакции не сохранится.