SQLite Транзакция

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

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

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

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

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

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

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

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

  • Долговечность:Гарантирует, что результаты или эффекты зафиксированной транзакции сохраняются даже в случае системного сбоя.

Управление транзакциями

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

  • BEGIN TRANSACTION: Начать обработку транзакции.

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

  • ROLLBACK: Откатить внесенные изменения.

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

Команда BEGIN TRANSACTION

Транзакцию можно начать с помощью команды BEGIN TRANSACTION или просто команды BEGIN. Такие транзакции обычно продолжают выполняться до тех пор, пока не встретится следующая команда COMMIT или 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

Теперь давайте начнем транзакцию и удалим из таблицы записи с age = 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

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

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

Проверьте таблицу COMPANY, в ней есть следующие записи:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0
Другие расширения