Транзакция представляет собой последовательность операций с базой данных, которые выполняются как единое целое. Рассмотрим основные методы открытия транзакций в различных СУБД.
Содержание
Основные понятия транзакций
Свойства транзакций (ACID)
| Свойство | Описание |
| Atomicity (Атомарность) | Все операции транзакции выполняются или не выполняются |
| Consistency (Согласованность) | Транзакция переводит базу из одного согласованного состояния в другое |
| Isolation (Изолированность) | Транзакции не мешают друг другу |
| Durability (Долговечность) | Результаты завершенных транзакций сохраняются после сбоев |
Синтаксис открытия транзакции
В SQL-серверах
- MySQL/MariaDB: START TRANSACTION или BEGIN
- PostgreSQL: BEGIN или START TRANSACTION
- Oracle: SET TRANSACTION или просто BEGIN
- SQL Server: BEGIN TRANSACTION
Пример для MySQL
- START TRANSACTION;
- INSERT INTO accounts (user, balance) VALUES ('user1', 1000);
- UPDATE accounts SET balance = balance - 100 WHERE user = 'user2';
- COMMIT; -- или ROLLBACK при ошибке
Уровни изоляции транзакций
Доступные уровни
| Уровень | Описание |
| READ UNCOMMITTED | Чтение незафиксированных данных |
| READ COMMITTED | Чтение только зафиксированных данных |
| REPEATABLE READ | Повторяемое чтение |
| SERIALIZABLE | Сериализуемые транзакции |
Установка уровня изоляции
- MySQL: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
- PostgreSQL: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- SQL Server: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Работа с транзакциями в приложениях
Пример на Python (psycopg2 для PostgreSQL)
- Установить соединение с базой данных
- Создать объект cursor
- Выполнить BEGIN TRANSACTION
- Выполнить SQL-запросы
- Подтвердить (commit) или откатить (rollback) изменения
- Закрыть соединение
Обработка ошибок
| Ситуация | Действие |
| Успешное выполнение | COMMIT |
| Ошибка в одном из запросов | ROLLBACK |
| Потеря соединения | Автоматический ROLLBACK |
Рекомендации по работе с транзакциями
Лучшие практики
- Делайте транзакции как можно короче
- Избегайте пользовательского ввода во время транзакции
- Используйте подходящий уровень изоляции
- Всегда обрабатывайте возможные ошибки
- Тестируйте работу с откатами
Правильное использование транзакций обеспечивает целостность данных и защищает от частичного выполнения операций при сбоях. Выбор конкретного подхода зависит от используемой СУБД и требований приложения.















