1. トランザクションとは何ですか? データベース トランザクション (略称: トランザクション) は、データベース管理システムの実行プロセスにおける論理単位であり、有限の一連のデータベース操作で構成されます。 2. 取引の4つの主要な属性 これらは、原子性、一貫性、独立性、および永続性です。 1. 原子性 アトミック性とは、トランザクションに含まれるすべての操作が成功するか、失敗してロールバックされるかのいずれかであることを意味します。したがって、トランザクション操作が成功した場合、その操作はデータベースに完全に適用される必要があります。操作が失敗した場合、データベースに影響を及ぼすことはできません。 2. 一貫性 一貫性とは、トランザクションがデータベースをある一貫した状態から別の一貫した状態に変換する必要があることを意味します。つまり、トランザクションは実行前と実行後に一貫した状態である必要があります。たとえば、ユーザー A とユーザー B の合計金額が 1000 であるとします。A と B がどのように、何回送金したとしても、取引が完了した後、2 人のユーザーの合計金額は 1000 のままである必要があります。これが取引の一貫性です。 3. 孤立 分離とは、複数のユーザーが同時に同じテーブルを操作するなど、データベースに同時にアクセスする場合に、各ユーザーに対してデータベースが開いたトランザクションが他のトランザクションの操作によって干渉されることがなく、複数の同時トランザクションが互いに分離されている必要があることを意味します。トランザクションの分離に関しては、データベースは複数の分離レベルを提供しますが、これについては後で紹介します。 4. 耐久性 永続性とは、トランザクションがコミットされると、データベース内のデータへの変更が永続的になり、データベース システムに障害が発生してもトランザクションのコミット操作が失われないことを意味します。たとえば、JDBC を使用してデータベースを操作する場合、トランザクション メソッドを送信した後、トランザクション操作が完了したことをユーザーに通知します。プログラムを実行してプロンプトが表示されたら、トランザクションが正しく送信されたことがわかります。この時点でデータベースに問題があったとしても、トランザクションを完全に実行する必要があります。そうしないと、トランザクションが完了したというプロンプトは表示されますが、データベースが障害のためにトランザクションを実行できないという重大なエラーが発生します。これは許可されません。 3. MySQL分離レベル コミットされていない読み取り コミットされていない読み取りトランザクション レベルでは、トランザクションは別のトランザクションによってコミットされていないデータを読み取ることができます。 コミットされた読み取り コミットされた読み取りトランザクション レベルでは、トランザクションは別のトランザクションがコミットされた後にデータを読み取ることができます。 例えば、トランザクション A が id 1000 のレコードの name フィールドを aaa として読み取り、その後トランザクション B がこのレコードの name 値を更新してコミットします。トランザクション A が再度 name を読み取ると、name の値は bbb になります。そのため、トランザクションでは、フィールドが複数回読み取られると、取得される値が異なる場合があります。 トランザクション A の前後で 2 回読み取られた値が矛盾しています。 繰り返し読み取り 繰り返し読み取りトランザクション レベルでは、トランザクションが繰り返し読み取るフィールドは変更されません。 たとえば、トランザクション A が ID 1000 で名前の値が aaa であるレコードを読み取り、その後トランザクション B が名前を bbb に変更し、トランザクション B がコミットされます。トランザクション A が名前を再度読み取ると、bbb は読み取られません。したがって、トランザクション A は独立した世界にあるのと同じであり、外部からの変更はトランザクション A に影響を与えません。 ただし、繰り返し読み取りはファントム読み取りにつながる可能性があります。ファントム読み取りとは何でしょうか? 例: 注: MYSQL の InnoDB は、MVCC (Multi-version Concurrency Control) を通じてファントム リード (幻影読み取り) を解決します。また、MYSQL のデフォルトのトランザクション レベルは繰り返し読み取りであり、Oracle および SQL Server のデフォルトの分離レベルは読み取りコミットです。 シリアル化可能 シリアル化可能なトランザクションレベルで、読み取られたデータの各行をロックします。 ロックの利点は、ダーティ リードやファントム リードを回避し、非反復読み取りの可能性も回避できることです。ただし、ロックにより、同時にロックを取得できるスレッドは 1 つだけになるため、同時実行性が大幅に低下します。また、タイムアウトの問題も多数発生する可能性があります。 概要: 非反復読み取りとファントム読み取りは混同されやすいです。非反復読み取りは変更に重点を置いていますが、ファントム読み取りは追加または削除に重点を置いています。非反復読み取りの問題を解決するには、条件を満たす行のみをロックする必要があります。ファントム読み取りの問題を解決するには、テーブルをロックする必要があります。 分離レベル:
レベルが高くなるほど、データのセキュリティは高まりますが、パフォーマンスは低下します。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Docker ファイルの保存パス、コンテナの起動コマンド操作の取得
>>: ウェブページのコメントにより IE でテキストがオーバーフローする
目次1. 親コンポーネントが子コンポーネントにデータを渡す1.1. 親コンポーネントコード1.2. ...
技術初心者として、初めて Linux システムをインストールするプロセスを記録しています。まず、Wi...
この記事の例では、ページ切り替え効果を実現するためのJSコードの具体的なコードを参考までに共有してい...
<br />ポテトチップスパーティーのこのエピソードに参加して、何人かの友達に会えてとて...
操作中に Docker コンテナの公開ポートを変更または追加する必要がある場合がありますが、実行中の...
1. 色合わせの問題<br />Web ページには 3 色以上使用しないでください。そう...
公式サイトからインストールパッケージをダウンロードします: mysql-8.0.19-linux-g...
1. Navicat for MySQL 15をダウンロードするhttps://www.navica...
この記事では、例を使用して、MySQL ビューの一貫性を確保する方法 (チェック オプションを使用)...
シナリオ最大 10000 要素のリストを正しくレンダリングする方法。無限ドロップダウン読み込みテクノ...
jquery-multiselect (ドロップダウン ボックスをチェックボックス付きの複数選択コン...
目次概要1. URL経由でダウンロード2. aタグのダウンロード属性とblobコンストラクタを組み合...
目次1. はじめに2. プロトタイプチェーン継承3. コンストラクタの継承4. 組み合わせ継承1. ...
最初のステップはTypeScriptをグローバルにインストールすることですnpmを使用してインストー...
この記事では、WeChatアプレットの9マスグリッド効果を実現するための具体的なコードを参考までに紹...