COMMIT в Oracle SQL — как управлять транзакциями

🟢COMMIT в Oracle SQL. Введение

В Oracle SQL транзакции по умолчанию не сохраняются автоматически. Это значит:
☑️ INSERT, UPDATE, DELETEне вступают в силу, пока вы не скажете базе данных: «Сохрани!». Для этого и нужен оператор COMMIT — он завершает текущую транзакцию, делая все изменения постоянными и видимыми для других пользователей.


🔤 Написание

sql
COMMIT;

Простая, но важная команда.


🔄 Где часто используется

  • После успешной обработки данных (вставка, обновление, удаление)

  • В процедурах, триггерах, пакетах

  • В ручных сценариях загрузки или миграции данных

  • После цикла обработки, чтобы зафиксировать изменения партиями

  • В администрировании БД


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

1️⃣ Вставка данных и сохранение

sql
INSERT INTO users (user_id, username)
VALUES (101, 'new_user');
COMMIT;

Сохраняем нового пользователя в базе.


2️⃣ Обновление и явное завершение транзакции

sql
UPDATE employees SET salary = salary * 1.05
WHERE department_id = 10;
COMMIT;

Изменения вступают в силу только после COMMIT.


3️⃣ Удаление с подтверждением

sql
DELETE FROM orders WHERE status = 'canceled';
COMMIT;

Удаление будет видно другим сессиям только после фиксации.


4️⃣ Работа с откатом (COMMIT vs ROLLBACK)

sql
BEGIN
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
COMMIT;
END;

Обе операции фиксируются одновременно.


5️⃣ Коммит в PL/SQL блоке

sql
BEGIN
INSERT INTO logs (event) VALUES ('Data loaded');
COMMIT;
END;

Подтверждение в рамках анонимного блока.


6️⃣ Промежуточный COMMIT в большом цикле

sql
BEGIN
FOR i IN 1 .. 10000 LOOP
INSERT INTO temp_table VALUES (i);
IF MOD(i, 1000) = 0 THEN
COMMIT;
END IF;
END LOOP;
END;

Фиксация каждые 1000 строк — для экономии памяти.


7️⃣ Коммит в хранимой процедуре

sql
CREATE OR REPLACE PROCEDURE approve_order(p_id NUMBER) IS
BEGIN
UPDATE orders SET status = 'approved' WHERE order_id = p_id;
COMMIT;
END;

Состояние заказа изменяется и сохраняется.


8️⃣ Проверка изменений до COMMIT

sql
-- В одной сессии:
UPDATE products SET price = price + 1;
— Во второй сессии:
SELECT price FROM products; — Изменений не видно!— После COMMIT в первой сессии:
— Теперь изменения видны и другим

Отличный пример поведения транзакций.


9️⃣ COMMIT при работе с триггером

sql
-- Не писать COMMIT внутри триггера! Это плохая практика.
-- COMMIT вызывается внешним кодом после DML.

Важно: не коммитить прямо из триггера.


🔟 Убеждаемся, что COMMIT зафиксировал изменения

sql
-- После COMMIT:
SELECT * FROM user_users;
— Всё, что вы сделали, теперь навсегда в БД

Нет пути назад — используйте ответственно.


🧩 Заключение

COMMIT — это простая, но критически важная команда. Она закрывает транзакцию, делая изменения необратимыми и видимыми другим пользователям. Без COMMIT все DML-операции остаются временными и могут быть отменены.

💡 Основные правила:

  • Без COMMIT — изменения не сохраняются

  • Используется после DML: INSERT, UPDATE, DELETE

  • Избегай COMMIT в триггерах

  • Используй COMMIT осознанно — после успешной логики


🔜 Следующая статья:

ALTER в Oracle SQL — как изменить таблицу, добавить столбцы и управлять структурой БД


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии