SQLite SAVEPOINTS:ROLLBACK如何与RELEASE一起使用?

时间:2017-05-24 15:49:48

标签: sqlite release rollback

我可能在SQLite中误解了SAVEPOINTS。

我在一个应用程序中使用C API,我们在其中运行一堆插入,如果出现故障,我们应该全部放弃所有插入。

我知道我可以为这样一个简单的场景开始交易,但我担心这个场景会变得更复杂,嵌套可能会成为一个要求,这就是我选择SAVEPOINTS的原因。

无论如何,这是我运行的SQL语句的摘录:

SQL> SAVEPOINT SAVEPOINT_20170524_172706;
SQL> INSERT, SELECT STATEMENT (no COMMIT or END TRANSACTION)
SQL> ROLLBACK TO SAVEPOINT SAVEPOINT_20170524_172706;
SQL> RELEASE SAVEPOINT_20170524_172706;

基本上,在开始插入数据库并从数据库中选择数据之前,我会根据时间戳创建一个新的保存点。 然后一个操作失败,我需要摆脱困境,所以我回滚到刚刚创建的保存点。 最后我想摆脱我不再需要的保存点,因为我不想用无用的保存点来混乱数据库,因此我运行了RELEASE。在这种情况下,我发现自己的数据库中填充了应该回滚的语句所插入的所有数据。

如果我不执行RELEASE语句,那么数据库看起来很好,但我想知道废弃的SAVEPOINT会发生什么,它将永远不会被引用。

我做了哪个错误的假设?如果我不释放SAVEPOINTS会发生什么,当我关闭与DB文件的'连接'时,它们会被“删除”吗?

1 个答案:

答案 0 :(得分:0)

我有PRAGMA journal_mode = OFF