可能性の複製]を選択:
SELECT … FOR UPDATE and MAX()UPDATE FOR
このクエリのロックの行を?
select max(id) from table where id like '9%' for update
他のユーザーがこのクエリを実行するとどうなりますか?
thisです。
可能性の複製]を選択:
SELECT … FOR UPDATE and MAX()UPDATE FOR
このクエリのロックの行を?
select max(id) from table where id like '9%' for update
他のユーザーがこのクエリを実行するとどうなりますか?
thisです。
インデックスにインデックスがない場合は、すべてのレコードがロックされます。しかし、あなたはそのようなインデックスを持っていると思います。これにより、一致するすべてのレコード(その間にいくつかのレコードを含む)がロックされます(3と5をロックすると4もロックされています)。
SELECT ... FOR UPDATEは、読み取る各行の排他ロック。したがって、検索されたSQL UPDATEが行に対して設定するのと同じロックを設定します。あなたは、この情報がインデックスからoptainedすることができますので、テーブルからすべての行を読む必要はありません... FROM SELECT MAX(ID)の場合
編集 。正確に1つの行をロックしたい場合は、SELECT * FROM table WHERE id = SELECT max(id)FROM table
更新のための別のselect max(id)は何を返すのですか? – user677900
select max(id)は行ではなくインデックスのみを読み込む必要があるので、何もロックしない可能性があります。select *を実行する必要があります。id = select max(id) –
これは、何もロックしない?更新のためにmax()を選択しないでください。 – user677900
私はを推測しました。は、transaction isolation levelに依存しています。
これは私の質問です。私の質問の最後の行を読んでください – user677900
はい、私は知っています。私はあなたの質問の最後の行からそれを見つけました。そして私はまだ同じことを尋ねる複数の質問をするべきではないと思います。 –