2

つまり、3つのテーブルにデータを挿入しています

Transaction
TransactionEntry
Payment

最初にTransactionにデータを挿入し、次にTransaction IDを取得してから、TransactionEntryにデータを挿入します。この後、Paymentに挿入します。

最初の 2 つのテーブルで、データが正常に挿入されたとします。次にサーバーの故障。

すべてのエントリをロールバックするにはどうすればよいですか? プログラムで制御できますか、またはデータベースにはこの種の状況を制御するデフォルト機能がありますか?

一貫性と完全性を実現するには?

java で、このタイプの状況を制御できるフレームワークはどれですか?

MySQL Java EE

4

2 に答える 2

3

作業単位が完了した後(または失敗した場合はロールバック)、自動コミットとコミットを無効にする必要があります。

これは次のようになります。

Connection con = ...; //set earlier
con.setAutoCommit(false);
...
try {
  //insert here
  ...
  con.commit();
} catch (Exception e) {
  con.rollback();
  // other exception handling
}
于 2012-06-24T07:36:10.733 に答える
2

mysql は通常の方法でトランザクションをサポートします。最初にトランザクションを開き、最後にコミットします。途中で何かが起こった場合、何も投稿されません。

Java EE を使用しているため、java mysql クライアントが組み込みステートメントを提案するかどうかを調査する必要があります。そうでない場合は、使用します

SET AUTOCOMMIT=0;

... statements ...

COMMIT;
于 2012-06-23T17:05:25.413 に答える