10

Java を使用してデータベース回復サブシステムをシミュレートしようとしています。ただし、次の質問があります。

begin transaction が発行されるたびに、常に end transaction が必要ですか? (下の例のように)

b1    --- Begin txn 1
r1(X) --- Read item X using txn 1
e1    --- End txn 1

上記の例のように、Commit トランザクション ステートメントは発行していません。それで、私のトランザクションは成功するか失敗しますか? 上記の例を以下のようにすると、

b1    --- Begin txn 1
r1(X) --- Read item X using txn 1
c1    --- commit txn 1

end と commit はどう違いますか?

さらに情報が必要な場合はお知らせください。

4

6 に答える 6

17

トランザクションをロールバックするか、トランザクションをコミットします。トランザクションではなく、トランザクションとはまったく関係のない BEGIN および END ブロックと混同しないことを願っています。

私はほとんどのデータベースを信じています....それでもROLL BACKまたはCOMMITで終わります。

お役に立てれば。

于 2013-02-11T05:46:45.503 に答える
3

BEGIN/ENDトランザクションを制御せずに、コードのブロックを区切ります。まだトランザクション内にない場合、各ステートメントは自律型トランザクションで実行されます。通常BEGIN/END、分岐/ループ命令で使用されます ( IF/WHILE)。

BEGIN TRANSACTION / COMMIT TRANSACTIONトランザクションの開始を示します。このブロック内の各ステートメントは同じトランザクションで実行され、個別にコミットまたはロールバックすることはできません。

于 2013-02-11T06:29:34.797 に答える
2

そのようなプログラム内からの SQL トランザクションの場合、END ステートメントは単純にトランザクションを閉じます。トランザクションが終了し、それ以上何も行われないことを意味します。COMMIT ステートメントは、トランザクションの変更を永続的にすることをデータベースに伝えます。

「自動コミット」モードの場合、すべてのクエリ/ステートメントをコミットする必要があるため、COMMIT ステートメントは必要ありません。

COMMIT の詳細については、こちらを参照してください。

データベース接続に ODBC を使用している場合は、トランザクション管理に関する情報がここにあります。

また、この質問は以前に尋ねられました。

于 2013-02-11T05:48:58.357 に答える
0

トランザクションを開始および終了するための正確なコマンド名は、(残念ながら) 使用する特定のデータベースによって異なります。

例えば:

SQLiteでは、BEGIN / BEGIN TRANSACTION を使用してトランザクションを開始し、END / END TRANSACTION / COMMIT / COMMIT TRANSACTION を使用してトランザクションを終了します。

MySQLでは、同じために START TRANSACTION / BEGIN / BEGIN WORK および COMMIT / COMMIT WORK を使用します。

于 2014-07-20T13:58:18.290 に答える
0

'End' は、プロシージャ/関数を終了するために使用されます。ステートメントが実行されることが重要です。
「コミット」は、トランザクション内のすべての変更を永続的に保存するために使用されています。
たとえば、SQL ステートメントを使用してテーブルを作成または削除した場合、変更をコミットする必要があります。

コミット ステートメントの詳細については、こちらをご覧ください。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4010.htm

于 2013-02-11T05:47:28.123 に答える
-1

詳しくはこちらのLINKをご覧ください

引用: BEGIN TRANS と END TRANS は、トランザクションを開始および終了します。新しいコード ブロックを指定しません。それらはトランザクション境界をマークするだけです。

于 2013-02-11T06:18:22.360 に答える