2

たとえば 1000 行を挿入するとどうなるでしょうか (20 秒かかりますが、クエリは 1 回です)。2 秒後、他の誰かが同じ場所に行を挿入しようとしました。

20secondquery
1|yellow
2|blue
3|green
4|violet

2secondquery
4|blue

彼らの行は挿入されますか、それとも挿入が完了するまでキューに入れられますか? (MyISAM)

4

3 に答える 3

2

MyISAMはテーブルレベルのロックを使用します。他の挿入物は待たなければなりません

于 2012-05-04T12:53:30.783 に答える
1

使用しているトランザクションやロックの種類によって異なります。

誰かが 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 TABLESUNLOCK TABLESテーブルの読み取りまたは書き込みができなくなります。

于 2012-05-04T12:45:50.623 に答える
1

簡単な答えは次のとおりです:それは依存します:)

これは、MySQL サーバーの構成 (concurrent_insertインスタンスの値) と、データを挿入するために実行しているクエリによって異なります。

MyISAM の同時挿入に関するドキュメント

于 2012-05-04T12:47:37.357 に答える