2017-08-29 5 views
1

2つの列を持つテーブルがあるとします。 1つはidと呼ばれ、これがその主キーです。もう1つはvalueです。この表には以下の10行があります。更新の開始行と終了行を選択すると、mysqlは一連の行をロックしますか?

1 'A' 
2 'B' 
3 'C' 
4 'D' 
5 'E' 
6 'F' 
7 'G' 
8 'H' 
9 'I' 
10 'J' 

それから私は、私はこの後どうなるかを知りたいこのSELECT * FROM table WHERE id IN (1, 10) FOR UPDATE;ようなクエリを適用します。私は一度それがロックするすべての10行ロックからそれを読んで覚えています。しかし、私はこれを繰り返すことはできません。この問題は実際に存在しますか?それとも私は忘れてしまっただけです。

+1

いつものように、マニュアルへの簡単な見方は、https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.htmlに役立ちます。アドバイスとして、ブロガーに頼らないでください。彼らの中には、本当に深く研究された話題ではなく、名声を得るために出版しているものもあります。私は間違いや古い情報をブログで比較的頻繁に発見しました。一方、マニュアルは間違っていることはめったにありません。 – fancyPants

答えて

0

ほとんどのDBMSデフォルトの分離レベルは、あなたが次の問題を持って対策を取ることなくそう、 を犯し読まれる:

  • 非repeteableは
    、結果としてを読み取ります
    • 更新が失われました
    • 読み取りスキュー
    • 書き込みスキュー
    • ファントムは、それはあなたが、例えば、where句まったく同じを使用している場合ことを意味し

現象は、あなたがこのような場合には心配しているものです読み込むファントム、 を読み込み、トランザクション中の後の更新ステートメントで、より多かれ少なかれ、まったく異なる行セットに影響を与える可能性があります。私はマニュアルを読んでいる

0

ができます:fancyPantsによって与えられたhttp://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html

、その後、私は確信している私は、行の範囲をロックしていないだろう何をしましたか。選択した行のみがロックされます。今私が読んだブログは間違っていると思います。

ありがとうございます。

関連する問題