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 でテキストがオーバーフローする
序文この記事では、Windows 10 システムで MySQL を完全に削除してアンインストールする...
CUDA インストール cuda をダウンロードサポートされているcudaバージョンを表示するには...
VMware ワークステーションの仮想マシンの互換性の問題を解決するにはどうすればよいですか?ノート...
イベント委任を使用してメッセージ ボード機能を実装します。 <!DOCTYPE html>...
<br />このタイトルを見ると、見覚えがあるかもしれません。多くのウェブサイトが同様の...
フォーム内のフォーム フィールドが無効に設定されている場合、フォーム フィールドの値は送信されません...
最適化する理由:実際のプロジェクトが開始され、データベースが一定期間稼働した後、初期のデータベース設...
目次1. 完全なSQLクエリステートメントの記述順序2. 完全なSQL文の実行順序3. select...
まずpostcss-pxtoremをインストールします: npm install postcss-p...
目次1. リバースプロキシの準備1. LinuxシステムにTomcatをインストールする2. Tom...
本日の投稿では、Web デザインで使用される円形要素の優れた例をいくつか挙げ、美しい丸いボタン、メニ...
メインライブラリの構成1. MySQLを設定する vim /etc/my.cn # ファイルに次の内...
Docker コンテナは互いに分離されており、相互にアクセスできないことは誰もが知っていますが、依存...
MySQLとElasticsearch間のデータ非対称性問題の解決策jdbc-input-plugi...
目次1. 使いやすい2. 関数内でジェネリックを使用する3. クラス内でジェネリックを使用する4. ...