python(17)データベースのトランザクションを学ぶ

2502 ワード

取引
-トランザクション(Transaction)は、一般的にやるべきことややるべきことを指します.コンピュータ用語では、データベース内の様々なデータ項目にアクセスし、更新可能なプログラム実行ユニット(unit)を指す.コンピュータ用語では、トランザクションは通常、データベーストランザクションを指します.
コンセプト
1つのデータベース・トランザクションには、通常、データベースの読み取りまたは書き込みを行う操作シーケンスが含まれます.その存在には、次の2つの役割があります.
  • 1は、データベース操作を失敗から正常な状態に戻す方法を提供し、データベースが異常状態でも一貫性を保つ方法を提供する.
  • 2は、複数のアプリケーションが同時にデータベースにアクセスするときに、相互の動作が互いに干渉しないように、これらのアプリケーション間で分離方法を提供することができる.

  • トランザクションがDBMS(データベース管理システム)にコミットされた場合、DBMSは、トランザクション内のすべてのオペレーションが正常に完了し、その結果がデータベースに永続的に保存されることを確認する必要があります.トランザクション内の一部のオペレーションが正常に完了しなかった場合、トランザクション内のすべてのオペレーションがロールバックされ、トランザクション実行前の状態に戻る必要があります(すべて実行するか、すべて実行しないか).同時に、このトランザクションはデータベースまたは他のトランザクションの実行に影響を及ぼさず、すべてのトランザクションが独立して実行されているようです.
    しかし、現実的には失敗のリスクが高い.1つのデータベース・トランザクションの実行中に、トランザクション・オペレーションの失敗、データベース・システム/オペレーティング・システムの失敗、さらにはストレージ・メディアの失敗などが発生する可能性があります.これにより、DBMSは失敗したトランザクションに対してリカバリ操作を実行し、データベースのステータスをコンシステンシ状態(データのコンシステンシが保証されている状態)にリカバリする必要があります.データベース・ステータスを一貫した状態に復元する機能を実現するために、DBMSは通常、トランザクション・ログを維持して、トランザクション内のデータベース・データに影響を与えるすべての操作を追跡する必要があります.
    トランザクションのプロパティ
    データベースに対する操作シーケンスがデータベーストランザクションであるわけではありません.トランザクションには、原子性、一貫性、独立性、持続性の4つのプロパティがあります.この4つの属性は一般にACID特性と呼ばれる.
  • 原子間性(Atomicity):トランザクションは全体として実行され、データベースに含まれる操作はすべて実行されるか、実行されません.
  • コンシステンシ(Consistency):トランザクションは、データベースの状態が1つのコンシステンシ状態から別のコンシステンシ状態に移行することを確認します.コンシステンシ・ステータスとは、データベース内のデータが整合性制約を満たすことを意味します.
  • 独立性(Isolation):複数のトランザクションが同時に実行される場合、1つのトランザクションの実行は他のトランザクションの実行に影響を与えるべきではありません.
  • 持続性(Durability):トランザクションがコミットされると、データベースの変更は永続的にデータベースに保存されます.

  • 例を挙げる
    よく使われる「A口座からB口座に送金」の例で、データベース・トランザクションを通じてデータの正確性と完全性を保証する方法を説明します.リレーショナル・データベース・トランザクションに詳しい人は、アカウントAからアカウントBまで6つの操作が必要であることを知っています.
    1、 A         (500)。
    2、 A       (500-100)。
    3、     A   (400)。
    4、 B         (500)。
    5、 B       (500+100)。
    6、     B   (600)。
    

    原子:
    1~6すべてのプロセスが実行されるか、実行されないことを保証します.ステップの実行中に問題が発生したら、ロールバック操作を実行する必要があります.ステップ5に進むと、Bアカウントが突然使用できなくなり(ログアウトなど)、以前のすべての操作はトランザクションを実行する前の状態にロールバックする必要があります.
    コンシステンシ
    振り替える前に、AとBの口座には500+500=1000元があります.振り込み後、AとBの口座は400+600=1000元だった.すなわち、データの状態は、トランザクション操作が実行された後、ある状態から別の状態に変更される.また、一貫性は口座残高がマイナスにならないことなどを保証します.
    ぶんりせい
    AがBに振り替える過程で、事務がまだ提出されていない限り、A口座とB口座を調べるとき、両口座のお金の数は変わりません.AがBに振り替えると同時に、もう一つの事務がCがBに振り替える操作を実行している場合、両方の事務が終わったとき、B口座のお金はAがBに振り替えるお金とCがBに振り替えるお金に自分の元のお金を加えるべきです.
    持続性
    振り込みが成功すると(トランザクションが提出される)、2つの口座の中のお金は本当に変わります(データをデータベースに書き込んで永続化して保存します)!事務の原子性と一致性は欠かせない.
    Python学習交流、資源共有群:563626388 QQ