mysqlデータベース-----トランザクション

目次

 1. トランザクションの概念

2. トランザクションの ACID 特性

(1) ダーティ・リーディング 

(2) 繰り返し不可能な読み取り

(3) ファントム読み取り

(4) アップデートが失われる


 1. トランザクションの概念

MySQL トランザクションは主に、大規模な操作と複雑性の高いデータを処理するために使用されます。たとえば、人事管理システムで個人を削除する場合、その個人の基本情報を削除するとともに、その個人に関連するメールボックスや記事などの情報も削除する必要があります。このように、これらのデータベース操作ステートメントがトランザクションを構成します。

●トランザクションとは、一連のデータベース操作コマンドを含む一連の操作メカニズムであり、すべてのコマンドがシステム全体に対して送信または取り消されます。つまり、この一連のデータベース コマンドが実行されるか、まったく実行されません。実行されました。


●トランザクションとは分割できない論理的な作業単位であり、データベースシステム上で並行処理を行う場合の最小の制御単位となります。

●トランザクションは、銀行、保険会社、証券取引システムなど、複数のユーザーが同時にデータベースシステムを運用するシナリオに適しています。

●トランザクションは、トランザクションの整合性を通じてデータの一貫性を保証します。

率直に言うと、いわゆるトランザクションは一連の操作であり、これらの操作はすべて実行されるかまったく実行されないかのいずれかであり、分割できない作業単位です。


2. トランザクションの ACID 特性

ACID は、信頼性の高いデータベース管理システム (DBMS) においてトランザクションが持つべき 4 つの特性 (原子性、一貫性、分離性、耐久性) を指します。これらは、信頼性の高いデータベースが持つべきいくつかの特性です。

●原子性: トランザクションが分割できない作業単位であり、トランザクション内のすべての操作が発生するか、何も発生しないことを意味します。

トランザクションは完全な操作であり、トランザクションの要素は分離できません。
トランザクション内のすべての要素は、全体としてコミットまたはロールバックする必要があります。
トランザクション内のいずれかの要素が失敗すると、トランザクション全体が失敗します。

ケース:
AがBに100元を送金するとき、控除明細書を実行して提出するだけですが、このときに突然停電が発生した場合、A口座はすでに引き落とされていますが、B口座は増額を受けていません。人生に起こること、争いの原因になること。この場合、すべてのトランザクションが実行されるか、まったく実行されないことを保証するには、トランザクションのアトミック性が必要です。
 

●一貫性: トランザクションの開始前およびトランザクションの終了後にデータベースの整合性制約が破壊されないことを意味します。

トランザクションが完了すると、データは一貫した状態になる必要があります。
トランザクションが開始される前、データベースに保存されているデータは一貫した状態にあります。
トランザクションの進行中、データは不整合な状態になる可能性があります。
トランザクションが正常に完了したら、データを既知の一貫した状態に再度戻す必要があります。

 
ケース:
銀行振込取引の場合、取引が成功するか失敗するかに関係なく、取引完了後のテーブル A と B の合計入金額が取引実行前と同じであることを確認する必要があります。
 

●分離: 同時環境において、異なるトランザクションが同じデータを同時に操作する場合、各トランザクションが独自の完全なデータ空間を持つことを意味します。

データを変更するすべての同時トランザクションは互いに分離されており、トランザクションは独立している必要があり、いかなる形でも他のトランザクションに依存したり影響を与えたりしてはいけないことを示しています。
データを変更するトランザクションは、同じデータを使用する別のトランザクションが開始される前、または同じデータを使用する別のトランザクションが終了した後にデータにアクセスできます。

●永続性: トランザクションの完了後、トランザクションによってデータベースに加えられた変更はデータベースに永続的に保存され、ロールバックされません。

これは、システムに障害が発生したかどうかに関係なく、トランザクション処理の結果は永続的であることを意味します。
トランザクションがコミットされると、トランザクションの効果はデータベースに永続的に保持されます。

(1) ダーティ・リーディング 

 トランザクションがデータにアクセスしてデータを変更しているが、その変更がまだデータベースにコミットされていない場合、別のトランザクションもデータにアクセスしてそのデータを使用します。

非コミット読み取り、コミット読み取り、反復読み取り、シリアル化の 4 つの分離レベルがあります。
  Read Uncommitted: Read Uncommitted は、名前が示すように、あるトランザクションが別のコミットされていないトランザクションのデータを読み取ることができることを意味します。最も低いレベルでは、4 つの一般的な問題 (ダーティ リード、反復不可能な読み取り、ファントム リード、更新の喪失) があります。
  Read Committed: Read Committed は、名前が示すように、トランザクションがデータを読み取る前に、別のトランザクションがコミットされるまで待機する必要があることを意味します。これはダーティ リードの問題を解決し、3 つの一般的な問題 (反復不可能な読み取り、ファントム読み取り、更新の消失) を抱えています。
  反復可能読み取り: 反復可能読み取りは、データの読み取りを開始する (トランザクションが開始される) とき、変更操作が許可されなくなることを意味します。これはダーティ リードと非反復読み取りを解決しますが、2 つの一般的な問題 (ファントム リード、更新の喪失) が存在します。
  シリアル化: シリアル化可能、シリアル化、またはシリアル化。これは、各トランザクションを特定の順序で実行することを意味し、分離の問題はすべて解決されますが、このトランザクション分離レベルは非効率的であり、データベースのパフォーマンスを消費するため、通常は使用されません。

 

(2) 繰り返し不可能な読み取り


トランザクション内で同じデータを複数回読み取ることを指します。このトランザクションが終了する前に、別のトランザクションも同じデータにアクセスします。その後、最初のトランザクションの 2 回のデータ読み取りの間で、2 番目のトランザクションの変更により、最初のトランザクションで 2 回読み取られたデータが異なる可能性があります。このように、1回のトランザクションで2回読み取られるデータは異なるため、Non-Repeatable Readと呼ばれます。(つまり、同じデータ内容を読み込むことはできません)

(3) ファントム読み取り

トランザクションはテーブル内のデータを変更します。この変更にはテーブル内のすべてのデータ行が含まれます。同時に、別のトランザクションもこのテーブルのデータを変更し、この変更によりテーブルに新しいデータの行が挿入されます。すると、前のトランザクションを操作したユーザーは、あたかも錯覚が起こったかのように、テーブル内にまだ変更されていないデータ行が存在することに気づきます。 

(4) アップデートが失われる

2 つのトランザクションが同じレコードを同時に読み取ります。A が最初にレコードを変更し、B もレコードを変更します (B は A が変更したことを知りません)。B がデータを送信した後、B の変更結果は A の変更結果を上書きします。

おすすめ

転載: blog.csdn.net/Sp_Tizzy/article/details/131755406
おすすめ