Часть 9.3: Команда ROLLBACK в базах данных SQLite (оператор ROLLBACK в SQLite3)

Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. При разработке приложений, которые работают с базами данных и транзакциями, вы неизбежно будете сталкиваться с ситуациями, когда появляется необходимость не применять изменения, которые были совершены во время транзакции. Причины такому поведению могут быть разными: от банальной ошибки ввода данных оператором до каких-либо технических перебоев на удаленных узлах, которые работают с распределенной базой данных. Для таких ситуаций и была придумана команда ROLLBACK TRANSACTION, которая говорит СУБД о том, что изменения базы данных внутри транзакции применять не стоит.

Команда ROLLBACK в базах данных SQLite (оператор ROLLBACK в SQLite3)

Команда ROLLBACK в базах данных SQLite (оператор ROLLBACK в SQLite3)

Из этой статьи ты узнаешь о том, как реализован оператор ROLLBACK TRANSACTION в базах данных SQLite. Мы поговорим о синтаксисе команды ROLLBACK в SQLite3, посмотрим пример использования ROLLBACK, а так же поговорим о некоторых технических моментах использования команды ROLLBACK TRANSACTION в SQLite3.


Команда ROLLBACK в базах данных SQLite (оператор ROLLBACK в SQLite3)

Рассмотрим третью команду из группы управления транзакциями – команду ROLLBACK TRANSACTION. Команда ROLLBACK TRANSACTION в базах данных SQLite используется для отмены запросов, введенных после команды BEGIN. Если команда COMMIT подтверждает изменения, то оператор ROLLBACK TRANSACTION их откатывает и завершает транзакцию. Давайте посмотрим на синтаксис команды ROLLBACK в  базах данных SQLite3.

Синтаксис команды ROLLBACK TRANSACTION в SQLite. Синтаксис оператора ROLLBACK TRANSACTION в базах данных SQLite3

Синтаксис команды ROLLBACK TRANSACTION в SQLite. Синтаксис оператора ROLLBACK TRANSACTION в базах данных SQLite3

Синтаксис оператора ROLLBACK в SQLite3 очень прост: сначала идет ключевое слово ROLLBACK, а затем идет ключевое слово TRANSACTION, которое можно не писать. Сейчас не обращайте внимание на SAVEPOINT, на мой взгляд это отдельная конструкция, которую мы рассмотрим в следующей записи. Давайте рассмотрим пример использования команды ROLLBACK TRANSACTION в SQLite.

Пример использования оператора ROLLBACK TRANSACTION в SQLite3

Для примера использования оператора ROLLBACK TRANSACTION в SQLite3  будем использовать демонстрационную базу данных World.db3. Совет: если вы самостоятельно будете повторять пример ROLLBACK TRANSACTION в SQLite, то выполняйте все команды по очереди, а не копируйте весь листинг целиком.

А теперь давайте убедимся в том, что оператор ROLLBACK TRANSACTION сработал и мы не внесли никаких изменений в таблицу базы данных SQLite3. Для этого мы выведем записи со второй по одиннадцатую командой SELECT:

Обратите внимание: иногда я использую слово оператор, вместо слова команда, это не совсем правильно с формальной точки зрения, так как SQL операторы не являются командами, так же часто вы можете услышать словосочетание SQL запрос, когда на самом деле человек говорит про SQL предложение. Пока вы не выполните команду ROLLBACK, SQLite3 не завершит транзакцию и не отменит изменения, внесенные данной транзакцией. Как только вы сказали SQLite ROLLBACK, все изменения будут отменены, а транзакция завершена.

Не важно какие команды выполнялись внутри транзакции, команда ROLLBACK TRANSACTION отменит любые. Вы создали базу данных командой CREATE или вы добавили несколько строк в таблицу командой INSERT, да даже если вы удалили таблицу командой DROP... ROLLBACK TRANSACTION вернет базу данных к тому состоянию, в каком она была до транзакции.

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

Текст комментария: