Транзакция – это последовательность операций, выполняемых в логическом порядке пользователем, либо программой, которая работает с БД.
Транзакция – это распространение изменений в БД. Например, если мы создаём, изменяем или удаляем запись, то мы выполняем транзакцию. Крайне важно контролировать транзакции для гарантирования.
Основные концепции транзакции описываются аббревиатурой ACID –
- Atomicity – Атомарность
- Consistency – Согласованность
- Isolation – Изолированность
- Durability – Долговечность
Атомарность
Транзакция выполняется целиком или не выполняется вовсе.
Пример: Если переводишь деньги, но происходит ошибка после списания — деньги возвращаются на счёт (откат).
Согласованность
После завершения транзакции данные остаются корректными.
Пример: Если со счёта А ушли 100₽, то на счёт B должно поступить 100₽.
Изолированность
Операции разных транзакций не мешают друг другу.
Пример: Если два клиента одновременно переводят деньги, они не должны повлиять на баланс друг друга.
Долговечность
Если транзакция подтверждена, её результат сохраняется даже при сбое.
Пример: После успешного перевода 100₽, даже при выключении сервера деньги не «исчезнут».
Для управления транзакциями используются следующие команды:
- COMMIT
Сохраняет изменения - ROLLBACK
Откатывает (отменяет) изменения - SAVEPOINT
Создаёт точку к которой группа транзакций может откатиться - SET TRANSACTION
Размещает имя транзакции.
Команды управление транзакциями используются только для DML команд: INSERT, UPDATE, DELETE. Они не могут быть использованы во время создания, изменения или удаления таблицы.
Любое успешное выполнение транзакции заканчивается командой COMMIT (фиксация), в то время как неудачное выполнение должно быть закончено командой ROLLBACK (откат), которая автоматически восстанавливает в базе данных все изменения, внесенные транзакцией.
MySQL по умолчанию работает в режиме AUTOCOMMIT. Это означает, что если вы не начали транзакцию явным образом, каждый запрос автоматически выполняется в отдельной транзакции.
Вы можете включить или отключить режим AUTOCOMMIT для текущего соединения, установив следующее значение конфигурационной переменной:
SET AUTOCOMMIT = 1;
Значения 1 и ON эквивалентны, так же как и 0 и OFF.
После отправки запроса в режиме AUTOCOMMIT=0 вы оказываетесь в транзакции, пока не выполните команду COMMIT или ROLLBACK. После этого MySQL немедленно начинает новую транзакцию.
————————————————————————–
По умолчанию, в SQL Server сессии работают в режиме AUTOCOMMIT (автоматической фиксации) и использования явных транзакций, мы можем построить транзакции нескольких SQL-команд.
Тем не менее, весь сервер может быть настроен на использование и неявных транзакций. Но возможно использование неявных транзакций и только в одной сессии SQL, что можно настроить с помощью следующей команды SQL
SET IMPLICIT_TRANSACTIONS ON;
которая будет в силе до конца сессии, но при необходимости её можно будет выключить следующей командой:
SET IMPLICIT_TRANSACTIONS OFF;





xampp
START Transaction; — *начало транзакции
insert into T(id,s) VALUES (4, ‘FOURTH’)
SELECT * FROM T;
START Transaction; — start вместо begin *начало транзакции
SAVEPOINT SP1; — место сохранения
SELECT * FROM t;
UPDATE T SET id = 5;
select * from t;
ROLLBACK TO SAVEPOINT SP1; — откат до сохранения
Select * from t;
Lisa kommentaar