2015-03-01 3 views
1

В Sqlite3 есть способ откат к точке после совершения транзакции? Если вам интересно, почему я совершаю утверждение, если не уверен, причина в том, что я использую Sqlite изнутри интерфейса C++, который сохраняет только файл, если я совершаю транзакцию.Sqlite rollback after commit

+0

Нет, нет. И, конечно же, это экономит только при совершении транзакции; совершение является актом сохранения данных, которые вы только что написали. –

+0

Спасибо @ColonelThirtyTwo. Как вы могли догадаться, моя цель - проверить мою базу данных в другом коде. Итак, рабочий процесс: (i) Обновление db. (ii) Протестируйте его в другой среде. (iii) Отменить, если не прошло. В этой связи я считаю, что лучшим решением является дублирование файла db до его изменения и использования для замены обновленного, если он не прошел тест. Идея лучше? – emre

+0

Вы можете использовать вложенные транзакции с 'SAVEPOINT' и' RELEASE' (http://sqlite.org/lang_savepoint.html). – Googie

ответ

2

Сделайте копию базы данных до совершения транзакции. Чтобы сделать копию, я предлагаю использовать семейство функций sqlite3_backup_*(), так как они гарантируют, что операция будет атомарной.

Если у вас есть большая база данных, и вы хотите сделать это только с 1 таблицей (этот сложный «откат»), тогда вы должны хранить таблицу в отдельной базе данных и ATTACH при ее использовании, поэтому вы можете делать резервную копию только базы данных с одной таблицей.

Смежные вопросы