← Назад к вопросам

Что такое COMMIT в SQL?

2.4 Senior🔥 251 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

COMMIT в SQL

Определение

COMMIT — это SQL команда, которая окончательно сохраняет все изменения, внесённые в базу данных в текущей транзакции. После выполнения COMMIT все операции (INSERT, UPDATE, DELETE) становятся постоянными и недоступны для отката.

Основная концепция: Транзакции

Транзакция — это логическая единица работы с БД, которая состоит из одной или нескольких SQL операций:

BEGIN TRANSACTION;
INSERT INTO users (name, email) VALUES ("John", "john@example.com");
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
DELETE FROM logs WHERE date < "2026-01-01";
COMMIT;

Как работает COMMIT

  1. Начало: транзакция начинается (явно или неявно)
  2. Операции: выполняются SQL команды
  3. COMMIT: все изменения записываются в БД окончательно
  4. Завершение: транзакция закрывается

COMMIT vs ROLLBACK

Два основных способа завершить транзакцию:

BEGIN;
  UPDATE users SET status = "active" WHERE id = 1;
  INSERT INTO audit_log (action) VALUES ("User activated");
COMMIT;

BEGIN;
  UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
  UPDATE accounts SET balance = balance + 1000 WHERE id = 2;
ROLLBACK;

Реальный пример: Переводы денег

BEGIN;
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;

BEGIN;
  UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  UPDATE accounts SET balance = balance + 100 WHERE id = 2;
  COMMIT;
ROLLBACK;

Свойства транзакций (ACID)

COMMIT гарантирует свойства ACID:

  • Atomicity (Атомарность) — либо все операции выполнены, либо ни одна
  • Consistency (Консистентность) — БД переходит из одного согласованного состояния в другое
  • Isolation (Изолированность) — изменения видны другим только после COMMIT
  • Durability (Долговечность) — после COMMIT данные сохранены навсегда

COMMIT в разных БД

PostgreSQL

BEGIN;
  INSERT INTO products (name, price) VALUES ("Laptop", 999.99);
COMMIT;

MySQL

START TRANSACTION;
  UPDATE inventory SET quantity = quantity - 1 WHERE id = 5;
COMMIT;

SQLite

BEGIN;
  DELETE FROM temp_data WHERE processed = false;
COMMIT;

Auto-commit режим

В большинстве БД по умолчанию auto-commit включён:

INSERT INTO users VALUES (1, "John");
UPDATE users SET name = "Jane";
SET autocommit = OFF;
SET AUTOCOMMIT = FALSE;

Работа с COMMIT в Python

import sqlite3

conn = sqlite3.connect("database.db")
cursor = conn.cursor()

try:
    cursor.execute("INSERT INTO users (name) VALUES (?)", ("John",))
    cursor.execute("INSERT INTO audit_log (action) VALUES (?)", ("User added",))
    conn.commit()
    print("Изменения сохранены")
except Exception as e:
    conn.rollback()
    print(f"Ошибка: {e}")
finally:
    conn.close()

С использованием контекстного менеджера

import sqlite3

with sqlite3.connect("database.db") as conn:
    cursor = conn.cursor()
    try:
        cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",))
        conn.commit()
    except Exception:
        conn.rollback()

Уровни изоляции транзакций

Когда несколько транзакций работают параллельно, уровень изоляции влияет на видимость COMMIT изменений:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Важные моменты

  • COMMIT необходим: без COMMIT изменения могут быть потеряны
  • Размер транзакции: очень большие транзакции блокируют ресурсы
  • Deadlock: два COMMIT могут конфликтовать, вызывая deadlock
  • Неявный COMMIT: некоторые операции (CREATE, DROP, ALTER) вызывают автоматический COMMIT

Итоговая схема

COMMIT — это команда SQL для окончательного сохранения всех изменений в текущей транзакции. Без COMMIT изменения остаются в памяти и могут быть отменены. COMMIT гарантирует atomicity и durability — основу надёжной работы с БД.

Что такое COMMIT в SQL? | PrepBro