Sobes.tech
Назад к вопросам
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 в таблицу логов внутри откатываемой транзакции не сохранится.