【发布时间】:2016-12-02 00:46:42
【问题描述】:
我正在尝试了解 SQLite 中的保存点和事务。 我在表/数据库上有以下命令,我正在使用保存点。
SAVEPOINT aaa;
RELEASE aaa;
BEGIN;
现在,如果我一次执行上述所有语句,它会抛出一个错误,指出 A transaction cannot be started inside another transaction。如果我一次运行它们,它工作正常。
如果我运行前两个 Savepoint 和 release 命令并尝试通过执行 Begin 来启动另一个事务。它再次抛出与以前相同的错误。
链接here 说
如果在 SQLite 处于自动提交模式(即在事务之外)时发出 SAVEPOINT 命令,则将启动标准自动提交 BEGIN DEFERRED TRANSACTION。但是,与大多数命令不同,自动提交事务不会在 SAVEPOINT 命令返回后自动提交,从而使系统处于打开的事务中。自动事务将保持活动状态,直到原始保存点被释放,或者外部事务被显式提交或回滚。 `
那么,在 Release Savepoint 命令之后是否绝对需要 Commit 或 Rollback 命令? release 命令不提交并允许我们使用BEGIN 启动新事务吗?
【问题讨论】:
-
你在使用 Python 吗?
-
不,我们使用的是 C#
-
怎么样?显示代码。
-
我们打算使用 C#,但我在普通 SQLite 编辑器中尝试上述命令只是为了了解保存点以决定保存点和事务或两者的混合。
-
这听起来像是该软件中的一个错误。尝试在
sqlite3中重现它。
标签: sqlite transactions savepoints