SQLite SAVEPOINTS:ROLLBACK 如何与 RELEASE 结合使用?

SQLite SAVEPOINTS: how does ROLLBACK works in conjunction with RELEASE?

我可能误解了 SQLite 中有关 SAVEPOINTS 的一些内容。

我在一个应用程序中使用 C API,我们 运行 一堆插入,万一失败,我们应该放弃所有插入。

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

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

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 会发生什么,当我关闭数据库文件的 'connection' 时,它们会变成 'dropped' 吗?

我有PRAGMA journal_mode = OFF