単純なクエリが 2 つあり、1 つはテーブルの読み取り、もう 1 つはテーブルの更新です。更新クエリの実行中に選択クエリの読み取りをロックする方法。 MySQL InnoDB では、書き込み/更新はデフォルトでロックされていますが、読み取り/選択ではトランザクションの前に古いデータが取得されることに気付きました。
更新クエリでトランザクションを使用してから、トランザクションの外で SELECT ... FOR UPDATE
を使用しようとしましたが、成功しなかったようです。また、テスト目的で、UPDATE クエリの速度を下げる方法を知りたいです。 SLEEP(X) を見つけましたが、更新クエリでそれを実装する方法がわかりません。
書き込みが完了するまで各クエリを読み取り/書き込み待機させる方法。
###これを試して。 1 つの画面でトランザクションと更新を開始します。 SLEEP() は必要ありません。トランザクションはコミットされないだけです。 UPDATE によって作成されたロックは、コミットするまで存在し続けます。READ-COMMITTED
トランザクションを使用すると、最新のコミットされたトランザクションが表示されます。SELECT ... LOCK IN SHARE MODE
を使用すると、未処理の更新がコミットされるまで読み取りがブロックされます。リーリー
まだ提出しないでください。リーリー
更新によって作成された未処理の排他ロックがまだ存在するため、共有モードでのロックは待機します。リーリー
2 番目の画面で、出来上がりです。ブロッキング読み取りのブロックが解除され、トランザクションをフラッシュせずに UDPATE の結果をすぐに確認できます。