テーブルから行を取得する2つのスクリプト/mysql接続があります。スクリプトがいくつかの行を取得すると、他のスクリプトがそれらの行にアクセスできないようにする必要があります。
私がこれまでに得たものは、これでうまくいくようです:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
START TRANSACTION
SELECT * FROM table WHERE result='new' FOR UPDATE
// Loop over update
UPDATE table SET result='old' WHERE id=...
COMMIT
私が理解していることから、同じ接続がダーティデータを読み取ることができますが、行がロックされているため、他の接続は読み取ることができないはずです。これは正しいです?
SELECT
また、両方のスクリプトが実行されているときに各行が1回だけになることを保証するより良い方法はありますか?
編集:ああ...そしてエンジンはInnodbです
編集:また、デッドロックが実際に効果がない場合を除いて、デッドロックを回避するように努めたいと思います。デッドロックの準備をしてクエリを再実行するだけで済みます。