Назад к вопросам
Middle
64
questionbank

Какие команды управления транзакциями вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

BEGIN (может быть неявным), COMMIT, ROLLBACK.

  • BEGIN: Начинает новую транзакцию. Является необязательным для первого оператора DML в сессии, так как транзакция начнется неявно.

    BEGIN TRANSACTION;
    
  • COMMIT: Сохраняет все изменения, сделанные в текущей транзакции, и завершает ее.

    COMMIT;
    
  • ROLLBACK: Отменяет все изменения, сделанные в текущей транзакции, и завершает ее.

    ROLLBACK;
    

Некоторые СУБД также поддерживают:

  • SAVEPOINT: Устанавливает точку сохранения внутри текущей транзакции. Позволяет откатиться к этой точке, не отменяя всю транзакцию.

    SAVEPOINT my_savepoint;
    
  • ROLLBACK TO SAVEPOINT: Отменяет изменения до указанной точки сохранения.

    ROLLBACK TO SAVEPOINT my_savepoint;
    
  • RELEASE SAVEPOINT: Удаляет точку сохранения.

    RELEASE SAVEPOINT my_savepoint;
    

Пример последовательности команд:

BEGIN; -- начать транзакцию

INSERT INTO users (name) VALUES ('Alice'); -- выполнить операцию

SAVEPOINT before_update; -- установить точку сохранения

UPDATE products SET price = price * 1.1 WHERE id = 1; -- выполнить еще операцию

-- Если что-то пошло не так с обновлением, можно откатиться к точке сохранения
-- ROLLBACK TO SAVEPOINT before_update;

-- Если все хорошо, фиксируем изменения
COMMIT; -- завершить транзакцию и сохранить изменения

-- Если нужно отменить всю транзакцию после BEGIN
-- ROLLBACK;

Понимание этих команд критически важно для обеспечения целостности данных в приложениях, работающих с реляционными базами данных.