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 でテキストがオーバーフローする
参考までに、Vue3でナビゲーションバーコンポーネントをカプセル化し、スクロールバーのスクロールに合...
まず、action はフォームの属性です。HTML5 では必須の属性値として定義されています。onS...
序文WeChat アプレットでは、App.js の globalData を中間ブリッジとして使用し...
分離レベル:隔離はあなたが考えるよりも複雑です。 SQL 標準では 4 つの分離レベルが定義されてお...
目次コードのクリーニングJavaScript の「フレーム」 「フレーム」の実装方法1. 間隔を設定...
折りたたみ表示の複数行テキストコンポーネント複数行のテキスト コンポーネントを折りたたんで表示し、展...
1. 説明MySQLでは、テーブル内の行の総数を取得する必要がある場合、通常は次の文を使用します。 ...
序文Web アプリケーションでは、トラフィックを節約し、転送データのサイズを縮小し、転送効率を向上さ...
最新のソリューション: -v /usr/share/zoneinfo/Asia/Shanghai:/...
個人アカウントのパスワードを変更する一般ユーザーが個人アカウントのパスワードを変更する場合は、他のコ...
1. nmonの紹介Nmon (Nigel's Monitor) は、AIX および Lin...
ある達人がかつて、自分の妻のことを知るのと同じくらい、自分が管理するデータベースのことを知るべきだと...
KVM はカーネルベースの仮想マシンの略で、Linux をハイパーバイザーに変換する Linux ...
この記事ではUbuntuでC++インターフェースを使用してopencvをインストールする方法について...
目次チュートリアルシリーズ1. MySQL の紹介2. MySQLの開発履歴3. MariaDBの基...