Учебники

SQLite — Транзакции

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

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

Практически вы объедините множество SQLite-запросов в группу и выполните их все вместе как часть транзакции.

Свойства сделок

Транзакции имеют следующие четыре стандартных свойства, на которые обычно ссылается аббревиатура ACID.

  • Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.

  • Согласованность — Гарантирует, что база данных корректно меняет состояния при успешной фиксации транзакции.

  • Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

  • Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.

Атомарность — гарантирует, что все операции внутри рабочего блока успешно завершены; в противном случае транзакция прерывается в точке сбоя, а предыдущие операции возвращаются в прежнее состояние.

Согласованность — Гарантирует, что база данных корректно меняет состояния при успешной фиксации транзакции.

Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

Долговечность — Гарантирует, что результат или результат совершенной транзакции сохраняется в случае сбоя системы.

Контроль транзакций

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

  • BEGIN TRANSACTION — начать транзакцию.

  • COMMIT — для сохранения изменений вы также можете использовать команду END TRANSACTION .

  • ROLLBACK — для отката изменений.

BEGIN TRANSACTION — начать транзакцию.

COMMIT — для сохранения изменений вы также можете использовать команду END TRANSACTION .

ROLLBACK — для отката изменений.

Команды управления транзакциями используются только с командами DML INSERT, UPDATE и DELETE. Их нельзя использовать при создании таблиц или их удалении, поскольку эти операции автоматически фиксируются в базе данных.

Команда НАЧАЛО СДЕЛКИ

Транзакции могут быть начаты с использованием BEGIN TRANSACTION или просто BEGIN. Такие транзакции обычно сохраняются до следующей команды COMMIT или ROLLBACK. Тем не менее, транзакция также будет ROLLBACK, если база данных закрыта или если произошла ошибка. Ниже приведен простой синтаксис для запуска транзакции.

BEGIN;
or 
BEGIN TRANSACTION;

Команда COMMIT

Команда COMMIT — это команда транзакций, используемая для сохранения изменений, вызванных транзакцией, в базу данных.

Команда COMMIT сохраняет все транзакции в базе данных с момента последней команды COMMIT или ROLLBACK.

Ниже приведен синтаксис команды COMMIT.

COMMIT;
or
END TRANSACTION;

Команда ROLLBACK

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

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

Ниже приведен синтаксис команды ROLLBACK.

ROLLBACK;

пример

Рассмотрим таблицу COMPANY со следующими записями.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Теперь давайте начнем транзакцию и удалим записи из таблицы, имеющие возраст = 25. Затем с помощью команды ROLLBACK отмените все изменения.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> ROLLBACK;

Теперь, если вы проверите таблицу COMPANY, она все еще имеет следующие записи —

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Давайте запустим еще одну транзакцию и удалим записи из таблицы, имеющие возраст = 25, и, наконец, мы используем команду COMMIT, чтобы зафиксировать все изменения.

sqlite> BEGIN;
sqlite> DELETE FROM COMPANY WHERE AGE = 25;
sqlite> COMMIT;

Если вы сейчас проверите таблицу КОМПАНИИ по-прежнему имеет следующие записи —