-2

私はそれについていくつかの研究を開始しているので、mysql でのトランザクション分離とは何か、そしてその利点を教えてください。これはそれについて取得するものです

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
  {
       REPEATABLE READ
     | READ COMMITTED
     | READ UNCOMMITTED
     | SERIALIZABLE
   }
4

1 に答える 1

1

トランザクション分離は、他のセッションが同時にデータを変更しているときに、現在のセッションが更新を参照するかどうかを制御します。

たとえば、トランザクションを開始する場合、トランザクションが終了するまでデータベースの安定したビューを確認したい場合があります。これは、数分間にわたっていくつかのレポート タイプのクエリを実行していて、基になるデータが変化していても数値を一致させたい場合に重要です。

分離レベルをREPEATABLE READ(デフォルト) に設定すると、トランザクションは、トランザクションを開始した瞬間に存在していたデータを読み取ることを意味します。そのトランザクションを終了して別のトランザクションを開始した場合にのみ、SELECT 時に更新されたデータを確認できます。

これは、MySQL が同じ行の複数のコピーを保持し、どのトランザクションがどのバージョンを参照できるかを追跡する必要があることを意味します。

トランザクションを 1 日中実行したままにしておくと、更新された行の古いバージョンをデータベースからパージできないことを意味します。

分離レベルを に設定するとREAD COMMITTED、他の人がデータを変更すると、次に SELECT を実行したときに、データの「ビュー」にそれらの変更が含まれます。これは、古いバージョンの行をすぐに削除できるため便利です。

READ UNCOMMITTED標準のためにサポートされていますが、それを使用する理由はほとんどありません。これは、他のセッションがコミットされる前に変更を確認できることを意味します。類推すると、「回答を投稿する」をクリックする前に、私が入力している投稿を読むことができるようなものです。これはあまり便利なトリックではありません。SELECT を実行していくつかの更新を表示した後、そのユーザーがロールバックすることを決定したために更新が消えてしまう可能性があるからです。

SERIALIZABLEも標準のためにサポートされており、頻繁には使用されません。このモードは、SELECT を行うと、共有モードで選択した行をトランザクションが暗黙的にロックすることを意味します。つまり、複数の人が競合することなく同じ行を同時に SELECT できますが、セッションのいずれかがそのタイプのロックを持っている場合、UPDATE や UPDATE はできません。それらの行を削除します。

詳細については、 http://dev.mysql.com/doc/refman/5.6/en/set-transaction.htmlを参照してください。

于 2014-07-08T00:43:07.053 に答える