5

SQLite のセーブポイントとトランザクションを理解しようとしています。テーブル/データベースで次のコマンドを実行し、セーブポイントを使用しています。

SAVEPOINT aaa;
RELEASE aaa;
BEGIN;

ここで、上記のすべてのステートメントを一度に実行すると、というエラーがスローされますA transaction cannot be started inside another transaction。一度に 1 つずつ実行すると、正常に動作します。最初の 2 つのセーブポイントとリリース コマンドを実行し、Begin. 以前と同じエラーが再びスローされます。

ここのリンクはそれを言う

SQLite が自動コミット モード (つまり、トランザクションの外部) にあるときに SAVEPOINT コマンドが発行されると、標準の自動コミット BEGIN DEFERRED TRANSACTION が開始されます。ただし、ほとんどのコマンドとは異なり、オートコミット トランザクションは SAVEPOINT コマンドが返された後に自動的にコミットされず、システムは開いたトランザクション内に残されます。自動トランザクションは、元のセーブポイントが解放されるか、外部トランザクションが明示的にコミットまたはロールバックされるまでアクティブのままになります。`

では、Release Savepoint コマンドの後の Commit または Rollback コマンドは絶対に必要ですか? releaseコマンドはコミットせず、次を使用して新しいトランザクションを開始できBEGINますか?

4

1 に答える 1