【JavaWeb】トランザクションとは何ですか?

1. トランスファーケース

私は基本的に送金に触れてきたと思いますが、オフラインの銀行カード送金であっても、オンラインの携帯電話送金であっても、本質的には同じです。
Liu Xiao'ai アカウントと Liu の母親のアカウントの 2 つのアカウントが必要です。Liu Xiao'ai のアカウントは転送され、Liu の母親のアカウントは転送されます。
データベースに SQL ステートメントを使用して口座情報テーブルを作成します。テーブルは非常に単純です。2 つの主な属性があり、1 つは口座名、もう 1 つは口座残高です。
次にコードを書きます。

  • Liu Xiaoai の口座から Liu の母親の口座に 1000 を送金する
  • Liu Xiaoai の口座残高が 1000 減少しました
  • 劉母の口座残高が1000増加しました

ここに画像の説明を挿入

① ユーザーに情報の入力を促す動作は
、Java のコンソール、つまり Scanner クラスを使用してシミュレートされます。

② Druid 接続プールから接続を取得する
Druid 接続プールをツール クラス JdbcUtil にカプセル化しているため、ツール クラスを直接使用して接続を取得できます。

③送金口座の事前作成
送金口座名はinName、送金金額はmoneyなので、データベース上の口座名に対応する金額を対応する金額だけ減算する必要があります。

④ 振込口座事前集計
振込口座名はoutName、振込金額はmoneyなので、データベース内の口座名に対応する金額を対応する金額だけ増やす必要があります。
コードが書かれたので、テストをしてみましょう:
ここに画像の説明を挿入
送金口座を Liu Xiaoai として指定します。
送金口座を Liu Mama として指定します。
送金金額を 1000 に設定します。

第二に、ビジネスの導入

私たちの送金の本質は、送金者がまず銀行にお金を送金し、銀行が送金者にお金を転送することであることを知っておく必要があります。このようにして、例えば、劉暁愛さんのお金は彼の口座から送金されたが、銀行はそのお金を劉さんの母親の口座に送金していなかった、突然、銀行に予期せぬ事故が発生したにもかかわらず、お金が送金できなくなった、という問題が発生します

劉さんの母親の口座に送金される。

この状況をコードでシミュレートします。
上記の例外は直接スローされ、今度はそれ自体で処理する必要があります。
IDEA 開発ツールのショートカット キー Ctrl+Alt+T を使用します。コードの一部を選択できます try...catch

ここに画像の説明を挿入
①口座外送金
このコードは、Liu Xiaoai の口座にあるお金を銀行に送金することに相当します。

② 例外を自分で書く
ここでプログラムを実行すると分母が0にならない、つまりエラーが報告されることは誰もが知っています。
これは銀行事故をシミュレートするために使用されます。

③口座への送金
本来であれば銀行がLiuさんの母親の口座に送金するべきなのですが、例外のためこのコードは実行できません。
最終結果を見てみましょう。Liu
ここに画像の説明を挿入
Xiaoai さんの口座のお金は減りましたが、Liu さんの母親の口座のお金は増えていません。
これは不可能であるため、この問題を解決するために、データベースにはトランザクションの概念が導入されています。
トランザクションは操作の論理グループを指し、この操作グループを構成するユニットはすべて成功するかすべて失敗します。
上の例を使って説明します。

  • 口座外振替と口座内振替の2つの操作があります。
  • 転送が成功すれば転送は成功です。
  • 成功した場合、トランザクションが送信され、転送が完了します。
  • 転送は成功しましたが、転送は失敗しました。申し訳ありませんが、すべて失敗しました。
  • 転送は失敗し、転送は成功しましたが、それでも失敗しました。
  • 失敗した場合、トランザクションはロールバックされ、転送前の状態に戻ります。

2、トランザクション操作

1. mysqlでのトランザクション
ここに画像の説明を挿入
① mysqlでトランザクションを開く

トランザクションを開始します。
トランザクションはトランザクションを意味します。

②mysqlにおけるトランザクション
commit とは、コミットすることを意味します。

③mysqlのトランザクションロールバック
; ロールバックという意味ですが、ロールバックとはどういう意味ですか?
トランザクション開始時の状態に戻ると理解できます。

2. Java のトランザクション
ここに画像の説明を挿入
1. Java でトランザクションを開きます。Java
の接続インターフェイス コレクションには、setAutoCommit() という API があります。
翻訳すると、自動コミットを設定します。名前が示すように、
true の場合、トランザクションは自動的にコミットされます。 ;
false の場合、トランザクションは自動的にコミットされません。
false に設定すると、手動でコミットします。

②Javaのコミットトランザクション
コレクションにもcommit()メソッドがあり、名前の通りコミットを意味します。

③Javaのロールバックトランザクション
コレクションにもrollback()メソッドがあり、名前の通りロールバックを意味します。

では、コミットしないトランザクションとロールバックするトランザクションの違いは何でしょうか?
まずトランザクションの処理について説明しますと、トランザクション開始後は、データの追加、削除、変更、クエリはトランザクションログに操作記録を更新するだけですが、データベースにデータを更新したい場合には、トランザクション送信の操作を実行する必要があります。成功した場合、コミットにより、すべての DML (挿入、更新、削除) ステートメントの操作履歴が基礎となるハード ディスク データと同期され、データベースに保存されます。トランザクションがコミットされていない場合、操作はトランザクション ログ内のレコードはデータベースと同期されません。
ロールバックとは、トランザクションの操作に問題があった場合のことですが、このときトランザクションログにあるDML(挿入、更新、削除)ステートメントの操作履歴記録はすべてクリアされ、当然データベースとの同期も行われなくなります。

3、ビジネスの4つの特徴

1. 原子性

私たちは概念を知っています。原子は物質の最小単位であり、分割することはできません。したがって、トランザクションにおける原子性とは、トランザクションが分割できない作業単位であり、トランザクション内の操作がすべて成功するかすべて失敗することを意味します。たとえば、同じトランザクション内の SQL ステートメントがすべて正常に実行されるか、すべて実行に失敗するかのどちらかです。送金の例もあります。私があなたに送金したお金はあなたの口座に送金する必要があり、送金することはできません。アカウントに転送されない場合、これらはアトミックな操作ではありません。

2 一貫性

つまり、トランザクションが開始および終了された後、その前後でデータベース内のデータが一貫している必要があります。

例:張三が李斯に100元を送金し、送金前後の合計金額が変わらない場合、張三が100元を送金しても李斯の口座が100元増えなかった場合、これを一貫性といいます。データにエラーがあり、一貫性がありません。

3 隔離

トランザクションの分離とは、複数のユーザーが同時にデータベースにアクセスする場合、各ユーザーに対してデータベースによって開かれたトランザクションが他のトランザクションの操作データによって妨げられないようにすること、および複数の同時トランザクションを互いに分離する必要があることを意味します。

4 耐久性

トランザクションが正常に完了すると、システム障害が発生した場合でも、データベースに加えられた変更は永続的に残ります。つまり、トランザクションがコミットされると、トランザクションによってデータに加えられた変更はデータベースに永続的に保持されます。

おすすめ

転載: blog.csdn.net/wang_qiu_hao/article/details/125214608