Перейти к содержанию

Начало урока

Транзакции и ACID

Объедините несколько операторов в одну единицу работы по принципу "всё или ничего"

Главная идея: Транзакция - это группа SQL-операторов, которую база данных рассматривает как единое, неделимое целое: либо вступают в силу все они, либо ни один. Транзакцию открывают командой START TRANSACTION, вносят изменения и завершают её командой COMMIT, чтобы сохранить всё, или ROLLBACK, чтобы отменить всё. Именно так банк переводит деньги между двумя счетами, ни разу не теряя и не выдумывая ни одной копейки.
К концу вы сможете:
  • открывать, сохранять и отменять работу с помощью START TRANSACTION, COMMIT и ROLLBACK,
  • объяснять четыре гарантии ACID на примере банковского перевода,
  • описывать, как autocommit автоматически оборачивает одиночные операторы,
  • точно предсказывать, что уцелеет при сбое оператора или обрыве соединения,
  • использовать SAVEPOINT для отката только части транзакции.

1. Наша схема-пример: маленький банк

Каждый пример в этой теме использует одну небольшую таблицу accounts. Каждая строка - это счёт клиента с именем и текущим балансом. Мы применяем движок хранения InnoDB, потому что в MySQL только InnoDB поддерживает транзакции (старый движок MyISAM их игнорирует). Создайте и заполните таблицу один раз:

CREATE TABLE accounts (
    account_id INT PRIMARY KEY,
    owner      VARCHAR(40) NOT NULL,
    balance    DECIMAL(10,2) NOT NULL
) ENGINE = InnoDB;

INSERT INTO accounts (account_id, owner, balance) VALUES
    (1, 'Alice', 500.00),
    (2, 'Bob',   300.00),
    (3, 'Carol', 1000.00);

Начальные данные выглядят так:

account_idownerbalance
1Alice500.00
2Bob300.00
3Carol1000.00

Для денег мы намеренно берём DECIMAL(10,2): он хранит точные значения, в отличие от FLOAT, который внёс бы ошибки округления, совершенно недопустимые рядом с банковским балансом.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя