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