Транзакция в MySQL - это последовательность операций с базой данных, которая выполняется как единое целое. Транзакции обеспечивают целостность данных, даже если система выйдет из строя во время выполнения операций.
Содержание
Транзакция в MySQL - это последовательность операций с базой данных, которая выполняется как единое целое. Транзакции обеспечивают целостность данных, даже если система выйдет из строя во время выполнения операций.
Основные свойства транзакций (ACID)
- Атомарность (Atomicity) - все операции выполняются или ни одна
- Согласованность (Consistency) - данные остаются в согласованном состоянии
- Изолированность (Isolation) - транзакции не мешают друг другу
- Долговечность (Durability) - результаты успешных транзакций сохраняются
Команды для работы с транзакциями
Команда | Описание |
START TRANSACTION | Начинает новую транзакцию |
COMMIT | Подтверждает изменения |
ROLLBACK | Отменяет изменения |
SAVEPOINT | Создает точку сохранения внутри транзакции |
Пример простой транзакции
- START TRANSACTION;
- UPDATE accounts SET balance = balance - 100 WHERE id = 1;
- UPDATE accounts SET balance = balance + 100 WHERE id = 2;
- COMMIT;
Уровни изоляции транзакций
1. READ UNCOMMITTED
- Самый низкий уровень изоляции
- Возможны "грязные" чтения
2. READ COMMITTED
Преимущества | Недостатки |
Защита от "грязных" чтений | Возможны неповторяющиеся чтения |
3. REPEATABLE READ (по умолчанию в MySQL)
- Защита от неповторяющихся чтений
- Возможны фантомные чтения
4. SERIALIZABLE
- Самый высокий уровень изоляции
- Полная изоляция транзакций
Типы таблиц, поддерживающие транзакции
- InnoDB (по умолчанию в современных версиях MySQL)
- NDB (для кластерных конфигураций)
- Falcon (экспериментальный движок)
Когда использовать транзакции
- Финансовые операции (переводы между счетами)
- Сложные многошаговые операции
- Когда требуется атомарность изменений
- При работе с критически важными данными
Ограничения транзакций
- Не все движки таблиц поддерживают транзакции
- Могут снижать производительность
- Требуют больше ресурсов
- Длительные транзакции могут блокировать другие операции