Подтвердить что ты не робот

Обрезать таблицу внутри транзакции

Может ли команда SQL "обрезать таблицу" использоваться в транзакции? Я создаю приложение, и моя таблица имеет массу записей. Я хочу удалить все записи, но если приложение завершилось неудачно, я должен был отменить мою транзакцию. Удаление каждой записи занимает очень много времени. Мне интересно, использую ли я таблицу truncate, могу ли я отменить транзакцию и вернуть свои данные в случае сбоя. Я понимаю, что таблица truncate не записывает каждое удаление в журнал транзакций, но мне интересно, записывает ли он запись в журнал, чтобы откат работал.

4b9b3361

Ответ 1

В SQL Server вы можете отменить TRUNCATE из транзакции. Как вы упомянули, он записывает удаление страниц в журнал.

Ответ 2

В Oracle, TRUNCATE TABLE - это оператор DDL, который нельзя использовать в транзакции (или, точнее, не может быть откат). AFAIK, если в процессе выполнения транзакции выполняется транзакция, транзакция завершается, а затем выполняется TRUNCATE и ее нельзя отменить.

В Informix поведение TRUNCATE несколько отличается; вы можете использовать TRUNCATE в транзакции, но единственными утверждениями, допустимыми после этого, являются COMMIT и ROLLBACK.

Другие СУБД, вероятно, имеют свои собственные идиосинкразические интерпретации поведения TRUNCATE TABLE.