我可能误解了SQLite中关于SAVEPOINTS的一些东西。
我在一个应用程序中使用了case,在这个应用程序中,我们运行了一堆插入,如果有什么失败,我们应该一起放弃所有的插入。
我知道我可以为这样一个简单的场景开始事务,但我担心这个场景可能会变得更加复杂,嵌套可能成为一个要求,这就是我选择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;基本上,在开始从数据库中插入和选择数据之前,我根据时间戳创建一个新的保存点。然后一个操作失败,我需要退出,所以我回滚到我刚刚创建的保存点。最后,我想摆脱我不再需要的保存点,因为我不想用无用的保存点来扰乱数据库,所以我运行了发布版。在这种情况下,我发现自己在数据库中填充了由本应回滚的语句插入的所有数据。
如果我不执行发布语句,那么数据库看起来就很好了,但是我想知道废弃的保存点会发生什么,因为它再也不会被引用了。
我在做哪一个错误的假设?如果我不释放SAVEPOINTS,那么当我关闭到DB文件的“连接”时,它们会被“丢弃”吗?
发布于 2017-05-25 07:32:32
我有PRAGMA journal_mode = OFF
https://stackoverflow.com/questions/44163159
复制相似问题