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
ますか?