COMMIT TRANSACTION がない場合、自動ロールバックは発生しますか?

Barbara Streisand
リリース: 2024-10-24 21:30:30
オリジナル
415 人が閲覧しました

Does Automatic Rollback Occur When a COMMIT TRANSACTION is Absent?

COMMIT TRANSACTION がない場合の自動ロールバック

トランザクション内で一連の SQL ステートメントを実行する場合、その目的はすべての変更をアトミックに適用することも、まったく適用しないこともできます。後続のステートメントでエラーが発生した場合、明示的な ROLLBACK TRANSACTION コマンドを使用せずにトランザクションが自動的にロールバックされるかどうかという問題が生じます。

次の例を考えてみましょう。

START TRANSACTION;

BEGIN;

INSERT INTO prp_property1 (module_name,environment_name,NAME,VALUE) VALUES ('','production','','300000');

/** Assume that a syntax error occurs here...**/
Blah blah blah

DELETE FROM prp_property1 WHERE environment_name = 'production';

COMMIT TRANSACTION;
ログイン後にコピー

エラーが発生するとトランザクションは自動的にロールバックされるという誤解があります。

ただし、 これはデータベース システムの一般的な動作ではありません。クライアントによって適用されるポリシーが存在しない場合、エラーによってロールバックが自動的にトリガーされることはありません。代わりに、エラーが報告され、トランザクションは開いたままになり、ユーザーが適切なアクションを実行できるようになります。

この例では、構文エラーが発生した場合、挿入ステートメントは失敗しますが、トランザクションは失敗します。ロールバックされる。 DELETE ステートメントは引き続き実行され、データはテーブルから削除されます。

この動作は、トランザクションを実行しているクライアントまたはアプリケーションによって制御できます。一部のクライアント側ツールまたはフレームワークは、未処理のエラーがロールバックをトリガーするポリシーを実装している場合があります。ただし、これはデータベース システムのデフォルトの動作ではないため、依存すべきではないことを覚えておくことが重要です。

エラーが発生した場合にトランザクションが確実にロールバックされるようにするには、エラー処理を使用するか、明示的に行うことが重要です。エラーが発生した場合は ROLLBACK TRANSACTION コマンドを発行します。

以上がCOMMIT TRANSACTION がない場合、自動ロールバックは発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート