ホームページ >バックエンド開発 >PHPチュートリアル >mysql 同時実行プラス更新用がロックされていない

mysql 同時実行プラス更新用がロックされていない

WBOY
WBOYオリジナル
2016-08-10 09:07:231467ブラウズ

長いトランザクションがあります
その真ん中と後ろの部分に行レベルのロックがあります
テストしたところ、ロックされていないことがわかりました
しかし、この部分だけを取り出すとロックできます
で私の長いトランザクション全体は、どのような状況でロックに影響しますか?
更新対象の product_term から ID を選択します (Id=".$v['P_Term_id'])。"

返信内容:

長いトランザクションがあります

その真ん中と後ろの部分に行レベルのロックがあります
テストしたところ、ロックされていないことがわかりました
しかし、この部分だけを取り出すとロックできます
で私の長いトランザクション全体は、どのような状況でロックに影響しますか?
更新対象の product_term から ID を選択します (Id=".$v['P_Term_id'])。"

設定が影響を受けます。

実は。 。まず初心者の質問をさせてください。 。 。 Innodbですか?以前、ミサムの事情に関する質問に遭遇しました。 。

わかりました。話題に戻ります。
排他ロックは通常、トランザクションが終了するまでこのクエリ範囲をロックします。
あなたと同じように。 ID行に対応するレコードがロックされます。
ただし、トランザクションの分離モードに基づきます。設定を変更していない場合、デフォルトは RR です。つまり、この排他ロックの前に実行した SELECT の結果は同じになります。 。これにより、ロックされていないように錯覚します。 。

あなたの事情がこんな感じなら

リーリー

このように、デフォルトの RR レベルにより、最初の範囲検索には既に id=1 が含まれており、同じトランザクションで取得された 3 行目は最初の行と同じになります。実際、この行のデータは 2 行目で変更されています。 2 つの同時実行がある場合、テーブルがロックされていないように見えることがあります~~

トランザクションの開始時にロックすることのみを推奨します。

この問題が発生しているかどうかわかりませんか?もしそうなら、トランザクション分離モードを注意深く研究すると、さらに落とし穴があることがわかるでしょう

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。