これらのクエリを MySQL 5.6.13 で実行しています。反復可能な読み取り分離レベルを使用しています。表は次のようになります。
セッションAターミナルで、以下のステートメントを発行しました
UPDATE manufacurer
SET lead_time = 2
WHERE mname = 'Hayleys';
セッション B ターミナルで、ACL Cables の値 lead_time を 2 に更新しようとしました。しかし、セッション A からの前の UPDATE コマンドがまだコミットされていないため (そしてセッション A はメーカー テーブルに排他ロックを持っているため)、この更新は待機します。これは理解できます。
しかし、以下のようにセッション B で SELECT ステートメントを実行しようとすると、
SELECT * FROM manufacturer
WHERE mcode = 'ACL';
製造元テーブルを正しくクエリし、行を提供します。これはどのように起こりますか?セッションAはまだ製造元テーブルの排他ロックを保持しているため、テーブルで排他ロックが保持されている場合、他のトランザクションは前のトランザクションがコミットされるまで読み書きできません。