1000行(20秒で1つのクエリー)を挿入するとどうなりますか? 2秒後、誰かが同じ場所に行を挿入しようとしました。2つのインサートが同時投稿
20secondquery
1|yellow
2|blue
3|green
4|violet
2secondquery
4|blue
行が挿入されるか、挿入が完了するまで待ち行列に入れられますか? (MyISAM)
1000行(20秒で1つのクエリー)を挿入するとどうなりますか? 2秒後、誰かが同じ場所に行を挿入しようとしました。2つのインサートが同時投稿
20secondquery
1|yellow
2|blue
3|green
4|violet
2secondquery
4|blue
行が挿入されるか、挿入が完了するまで待ち行列に入れられますか? (MyISAM)
どのような取引やロックを使用しているかによって異なります。
誰かが大きなINSERT文を発行した場合、それはアトミックに1回の操作として完了します。彼らがINSERTの全部をスパムしている場合、2番目のクエリはそれらの間に入ります。
この種のものを制御するには、Table Lockingを調べる必要があります。他LOCK TABLES
とUNLOCK TABLES
何の間の時間のために
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;
読み取りまたはテーブルに書き込むことができるようになります。
OPは "MyISAM"と言っています。 –
良い点、私はそれを逃した。ただし、ストレージエンジンの基本特性にあまり依存せず、可能な限り明示的にすることをお勧めします。来週、クライアントはInnoDBに移動し、すべてのベットはオフになります。 – Cylindric
短い答えは:それは依存:)
それはあなたのMySQLサーバの設定(例えばconcurrent_insert
の値)に、あなたのデータを挿入するために実行しているクエリに依存します。
+1これはOPが理解するのに重要ですが、OPは "同じ場所に行を挿入する"と言っています。 –
のMyISAMは、テーブルレベルのロックを使用します。他のインサートは待つ必要があります
+1これは答えですが、それを明確にしたいかもしれません。 [adrienの答え](http://stackoverflow.com/questions/10449035/two-inserts-simultaniously/10449092#10449092)を参照してください。 –
:/ iveは、高性能のmySqlを読み始めたばかりで、私が与えることができる最高のクリアショットは – kommradHomer
第2版だと思います。 :) –
第4カラーとしてバイオレットを選んだ人は一度も見たことがありません。 – kommradHomer