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. 準備2. コマンドラインの記述2.1 バージョンと説明を追加する2.2 パスワードの長さを...
ドキュメントはしばらく前から書いていましたが、アップロードする勇気がありませんでした。サーバーのセキ...
目次1.entires() メソッドの詳細な構文2.entires() メソッドの一般的な使用法と注...
原文記事、転載の際は著者と出典を明記してください! Web デザインは間違いなくテクノロジーであり、...
例示するシステムを自分でインストールする場合は、通常、システム言語をカスタマイズできます。ただし、ク...
この記事では、例を使用して、MySQL クエリ条件の一般的な使用方法を説明します。ご参考までに、詳細...
目次1. ウィンドウ関数とは何ですか? 1. ウィンドウをどのように理解しますか? 2. ウィンドウ...
mysql のような php switch case ステートメント。 xxフィールドを選択、ケース...
IIS7 では、「URL REWRITE2」疑似静的モジュールがインストールされているかどうかを確...
この記事では、フォームの隠しテキストを表示するためのJavaScriptの具体的なコードを参考までに...
1. 同じタイプの空の要素を追加し、要素の CSS 属性 clear:both; を設定します。 ...
カルーセルを作りたい場合、まずその原理を理解する必要があります。画像を右から左にスライドさせるにはど...
デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...
1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...
この記事では、Element-uiを使用してメニューナビゲーションを実装するVueの具体的なコードを...