О web-разработке
и даже немного больше...

Транзакции

Транзакция в MySQL — это последовательность SQL-операций (например, INSERT, UPDATE, DELETE), рассматриваемых как единое целое, которое либо выполняется полностью, либо не выполняется вообще, гарантируя целостность данных с помощью принципов ACID (атомарность, согласованность, изоляция, длительность). Для работы с транзакциями таблицы должны использовать движок InnoDB или BDB.

Основные понятия транзакций:

  • Атомарность (Atomicity): Все изменения в рамках транзакции либо применяются полностью, либо не применяются никакие.
  • Согласованность (Consistency): Транзакция переводит базу данных из одного согласованного состояния в другое, не допуская аномалий.
  • Изоляция (Isolation): Операции в рамках одной транзакции изолированы от других параллельно выполняющихся транзакций.
  • Длительность (Durability): После успешного завершения транзакции ее изменения сохраняются в базе данных навсегда.

Как работают транзакции:

  • Запуск транзакции: Транзакция начинается с команды START TRANSACTION или BEGIN.
  • Выполнение операций: Внутри транзакции выполняются нужные SQL-команды.
  • Фиксация (COMMIT): Если все операции прошли успешно, используется команда COMMIT для подтверждения всех изменений.
  • Откат (ROLLBACK): В случае ошибки, команда ROLLBACK отменяет все изменения, сделанные в рамках транзакции, и возвращает базу данных в исходное состояние.

Пример использования:

START TRANSACTION; # Начинаем транзакцию
INSERT INTO accounts (user_id, amount) VALUES (1, 100); # Добавляем средства на счет
UPDATE accounts SET amount = amount - 100 WHERE user_id = 2; # Снимаем средства со счета
COMMIT; # Фиксируем изменения (если все прошло успешно)
# Если возникла ошибка, можно использовать ROLLBACK;

Когда использовать транзакции:
Транзакции необходимы для операций, где требуется сохранить целостность данных, например, при банковских переводах, оформлении заказов или любом другом сложном изменении данных.

Откат транзакции
Откат транзакции – это действие, обеспечивающее аннулирование всех изменений данных, которые были сделаны в теле текущей незавершенной транзакции.

START TRANSACTION;
INSERT MyUserName (FName, LName)
VALUES ('TestName', 'TestName0');

INSERT MyUserTell (IdUser, TellN)
VALUES (@id=@@IDENTITY, '(097)2224455');

INSERT MyUserInfo (idUser, BDate)
VALUES (@id, '1990-01-02')

ROLLBACK;
Опубликован: 28.05.2026 г.

См. также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *