17:21
Введение в транзакции: Основные понятия.

Курс по SQL

Урок 36: Введение в транзакции: Основные понятия

В этом уроке мы рассмотрим основные понятия транзакций в SQL. Транзакции играют важную роль в обеспечении целостности данных и позволяют выполнять несколько операций как единое целое. Мы изучим основные понятия транзакций и их использование в SQL.

Что такое транзакция?

Транзакция — это последовательность одной или нескольких операций с базой данных, которые выполняются как единое целое. Транзакции обеспечивают четыре ключевых свойства, известных как ACID:

  • Atomicity (Атомарность): Все операции внутри транзакции выполняются как одно целое. Если одна из операций не выполняется, вся транзакция отменяется.
  • Consistency (Согласованность): Транзакция переводит базу данных из одного согласованного состояния в другое согласованное состояние.
  • Isolation (Изолированность): Результаты выполнения транзакции не видны другим транзакциям до тех пор, пока транзакция не будет зафиксирована (committed).
  • Durability (Долговечность): После фиксации транзакции ее результаты сохраняются в базе данных даже в случае сбоя системы.

Команды управления транзакциями

В SQL используются следующие команды для управления транзакциями:

  • BEGIN TRANSACTION: Начало новой транзакции.
  • COMMIT: Фиксация транзакции, подтверждающая все изменения.
  • ROLLBACK: Отмена транзакции, отменяющая все изменения.

Пример использования транзакций

Рассмотрим пример использования транзакции для перевода денег с одного счета на другой:

BEGIN TRANSACTION;

UPDATE Счета
SET Баланс = Баланс - 100
WHERE НомерСчета = '123';

UPDATE Счета
SET Баланс = Баланс + 100
WHERE НомерСчета = '456';

COMMIT;

Результат выполнения

Транзакция завершена успешно. Балансы счетов обновлены.

Использование команды ROLLBACK

Команда ROLLBACK используется для отмены изменений, выполненных в рамках транзакции. Рассмотрим пример:

BEGIN TRANSACTION;

UPDATE Счета
SET Баланс = Баланс - 100
WHERE НомерСчета = '123';

-- Произошла ошибка, отменяем транзакцию
ROLLBACK;

Результат выполнения

Транзакция отменена. Балансы счетов не изменены.

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

Уровни изоляции транзакций определяют степень изолированности транзакций друг от друга. В SQL существуют следующие уровни изоляции:

  • Read Uncommitted (Чтение незафиксированных данных): Транзакция может читать данные, которые еще не зафиксированы другими транзакциями.
  • Read Committed (Чтение зафиксированных данных): Транзакция может читать только те данные, которые зафиксированы другими транзакциями.
  • Repeatable Read (Повторяемое чтение): Транзакция может несколько раз читать одни и те же данные и всегда получать одинаковый результат.
  • Serializable (Сериализуемость): Наивысший уровень изоляции, обеспечивающий полную изолированность транзакций друг от друга.

Упражнения

Упражнение 1: Использование транзакции для перевода денег

Создайте транзакцию для перевода 200 рублей с одного счета на другой. Если баланс на счете отправителя меньше 200 рублей, отмените транзакцию.

Решение:

BEGIN TRANSACTION;

IF (SELECT Баланс FROM Счета WHERE НомерСчета = '123') >= 200
BEGIN
 UPDATE Счета
 SET Баланс = Баланс - 200
 WHERE НомерСчета = '123';

 UPDATE Счета
 SET Баланс = Баланс + 200
 WHERE НомерСчета = '456';

 COMMIT;
END
ELSE
BEGIN
 ROLLBACK;
END;

Объяснение: Мы создали транзакцию для перевода 200 рублей с одного счета на другой. Если баланс на счете отправителя меньше 200 рублей, транзакция отменяется.

Упражнение 2: Использование транзакции для обновления данных

Создайте транзакцию для обновления зарплат всех сотрудников на 10%. Если количество сотрудников меньше 5, отмените транзакцию.

Решение:

BEGIN TRANSACTION;

IF (SELECT COUNT(*) FROM Сотрудники) >= 5
BEGIN
 UPDATE Сотрудники
 SET Зарплата = Зарплата * 1.1;

 COMMIT;
END
ELSE
BEGIN
 ROLLBACK;
END;

Объяснение: Мы создали транзакцию для обновления зарплат всех сотрудников на 10%. Если количество сотрудников меньше 5, транзакция отменяется.

Упражнение 3: Уровни изоляции транзакций

Настройте уровень изоляции транзакции на "Repeatable Read" и выполните транзакцию для выборки данных из таблицы "Заказы".

Решение:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

BEGIN TRANSACTION;

SELECT * FROM Заказы;

-- Другие операции

COMMIT;

Объяснение: Мы настроили уровень изоляции транзакции на "Repeatable Read" и выполнили транзакцию для выборки данных из таблицы "Заказы".

Категория: SQL | Просмотров: 47 | Добавил: Admin | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: