トランザクション連鎖とautocommitの概念間の関係を理解しようとしています。 Autocommitは通常、クライアント側のプログラムインターフェイスで公開されます。例えば。 JDBCで Connection#setAutoCommit メソッドを使用します。
つまり、私は次のことを知りたいです:
または
ケースが1であることを示唆する多くのリソースがあります。同じリソースは、unchained
がautocommit on
に対応することを示唆しているようです。例えば。 この投稿 は次のように述べています:
チェーンをオフに設定(Sybaseのデフォルト、=自動コミットをオンに設定)
このより広範な投稿 同様に言う:
一部のデータベースプログラミングインターフェイスには自動コミットモードがあり、非チェーンモードとも呼ばれます。このモードでは、各ステートメントはトランザクションであり、実行後にコミットされます。アプリケーションでトランザクションを使用する場合は、手動コミットモードまたはチェーンモードを使用する必要があります。
これまでのところ、私自身の理解です。たとえば、ストアドプロシージャを(JDBCを使用して)実行しようとすると、次のメッセージが表示されます。
Java.sql.SQLException:ストアドプロシージャ 'whatever'は、非チェーントランザクションモードでのみ実行できます。
…そして私のコードで設定します:
conn.setAutoCommit(true);
…実際にunchainedがautocommitと同じであることを確認するように見える問題を修正します。
ただし、 Sybase ASEのドキュメント を見ると、次のようになります。
非チェーンモードまたはTransact-SQLモードと呼ばれる既定のモードでは、トランザクションを完了するために、コミットトランザクションまたはロールバックトランザクションステートメントと組み合わせた明示的なbegin transactionステートメントが必要です。
これはautocommitの正反対です-上記のテキストが次の意味を持つと理解されない限り:
非連鎖モードまたはTransact-SQLモードと呼ばれるデフォルトモードでは、トランザクションを完了するために、コミットトランザクションまたはロールバックトランザクションステートメントとペアになっている明示的なbegin transactionステートメントが必要です。トランザクション。
最後に、私は この投稿 に遭遇しましたchainingとautocommitはほとんど直交していることを示唆しています。
AutoCommit trueはチェーンオフと同じです
AutoCommit falseはchained onと同じです
連鎖モードでは、最初のステートメントが暗黙的なトランザクションを開始し、手動でコミットまたはロールバックするまでアクティブのままになります。
マニュアルでは、デフォルトモードはチェーンなしであると記載されていますが、これはクライアントライブラリには当てはまりません。 JDBCおよびPythonドライバは、上書きしない限り、デフォルトのチェーンモードを使用します。