1

Java JPA で Google App Engine を使用しています。分離レベルは、トランザクション内でシリアライズ可能です。反復読み取り外部トランザクション。

私は多くの記事を検索し、誰もがトランザクション間の動作について話しますが、同じトランザクション内での読み取りについては誰も言及していません。

例 :

/* data in User table with {ID=1,NAME='HANK'}  */

BEGIN;
UPDATE User SET name = 'MING' WHERE ID=1;
SELECT name FROM User WHERE ID = 1;
COMMIT;

結果 : まだ {ID=1, NAME='ハンク'}

私の質問:

  1. 分離レベルの設定は、同じトランザクション内のクエリに影響しますか?
  2. 同一取引のルールとは?
4

1 に答える 1

1

同じトランザクション内で実行されたクエリは、すぐにそれ自体に表示されます。この例では、ID が 1 の行を読み取ると、更新されていることがわかります。違いは、他のユーザーがあなたのトランザクションによってどのように影響を受けるかです。あなたの分離レベルに応じて、他のユーザーは次のことを行う可能性があります。

  • ブロックされると、他のユーザーはあなたがコミット/ロールバックするまで待機します
  • トランザクション前のデータを読み取る (スナップショットの分離)
  • コミットしなくても最新のデータを読み取る (コミットされていない読み取り)

私は分離レベルの表面をなぞっているだけです。このテーマについて書かれた本はたくさんあります。

于 2012-04-17T03:37:36.343 に答える