2012-04-17 10 views
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 = 'HANK'}

マイ質問:

  1. 分離レベルの設定が同じトランザクション内のクエリに影響を及ぼし?
  2. 同じトランザクションを持つルールは何ですか?
+0

はい私はしました。しかし、私は同じ取引で何がルールなのか分かりませんし、混乱しています。 – minglight

+0

異なるDBMSには異なる回答があると私は信じています。具体的には、Oracleの回答はおそらく他のほとんどのDBMSと異なります。特定のDBMSを覚えていましたか? –

答えて

1

同じトランザクション内で実行されたクエリはすべて、すぐに自分自身に表示されます。あなたの例では、IDが1の行を読むと、それが更新されていることがわかります。違いは、他のユーザーがあなたのトランザクションの影響を受ける方法です。他のユーザーがあなたの分離レベルにも依存する:あなたがコミットするまで

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

私は単なる分離レベルの表面を傷つけています。

関連する問題