たとえば 1000 行を挿入するとどうなるでしょうか (20 秒かかりますが、クエリは 1 回です)。2 秒後、他の誰かが同じ場所に行を挿入しようとしました。
20secondquery
1|yellow
2|blue
3|green
4|violet
2secondquery
4|blue
彼らの行は挿入されますか、それとも挿入が完了するまでキューに入れられますか? (MyISAM)
MyISAMはテーブルレベルのロックを使用します。他の挿入物は待たなければなりません
使用しているトランザクションやロックの種類によって異なります。
誰かが 1 つの大きな INSERT ステートメントを発行すると、それは 1 つの操作としてアトミックに完了します。彼らが大量の INSERTS をスパム送信している場合、2 番目のクエリはそれらの間に収まります。
この種のことを制御するには、テーブルのロックを調べる必要があります。
LOCK TABLES widgets WRITE;
INSERT INTO widgets (name) VALUES ('Widget A');
INSERT INTO widgets (name) VALUES ('Widget B');
INSERT INTO widgets (name) VALUES ('Widget C');
INSERT INTO widgets (name) VALUES ('Widget D');
INSERT INTO widgets (name) VALUES ('Widget E');
UNLOCK TABLES;
から までの間はLOCK TABLES
、UNLOCK TABLES
テーブルの読み取りまたは書き込みができなくなります。
簡単な答えは次のとおりです:それは依存します:)
これは、MySQL サーバーの構成 (concurrent_insert
インスタンスの値) と、データを挿入するために実行しているクエリによって異なります。