Транзакция в 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;
Добавить комментарий