データベース内のテーブルに到達しようとしている2人のユーザーが、 User1が= 10InnoDBエンジンの行レベルロックとMySQLデータベースのMyISAMエンジンのテーブルレベルロックの違いを明らかにする
UPDATEコメントSETコメントID = 10
User2が、すべての行の選択作っている= "Hello World" のIDを持つレコードのために作ると、更新され
同じテーブルコメント
SELECT *私は、次の例の違いを議論したいコメント
FROM:
- テーブルのエンジンはMyISAMテーブルの場合:更新クエリがキューに入れます テーブル全体をロックします の更新が行われるまで選択クエリが実行され、実行されます。 ユーザーは、更新が完了するまで が完了するまで、このテーブルから何も要求しません。
- テーブルのエンジンがInnoDBの場合:更新クエリは更新された行をロックします。
私はこのロックがどのようにSELECT QUERYに影響していますか?
私は、selectがデータベースにコメントテーブルの全レコードを要求し、そのうちの1つ(id = 10)がロックされていることを意味します。
「はい」の場合、2つのエンジンの違いは何ですか?
もし私が私のウェブサイトで同じ状況があり、私のテーブルエンジンをMyISAMからInnoDBに変更したとしたいのですが、更新や挿入クエリがあったときにリクエストをキューに入れてしまう問題があります。
この状況の説明は非常に役立ちます。事前にありがとう
この例では、両方のエンジンの更新が完了するまでselectが待機する必要があります。 selectクエリにID 10(更新によってロックされている)のレコードが含まれていない場合は、このケースではMyISAM selectが待機する必要がありますが、InnoDBはそうではありません。 "InnoDBのこの機能は並行性と呼ばれています" - http://stackoverflow.com/a/28070969/934739 –