2012-05-04 6 views
2

1000行(20秒で1つのクエリー)を挿入するとどうなりますか? 2秒後、誰かが同じ場所に行を挿入しようとしました。2つのインサートが同時投稿

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

2secondquery 
4|blue 

行が挿入されるか、挿入が完了するまで待ち行列に入れられますか? (MyISAM)

+0

第4カラーとしてバイオレットを選んだ人は一度も見たことがありません。 – kommradHomer

答えて

1

どのような取引やロックを使用しているかによって異なります。

誰かが大きなINSERT文を発行した場合、それはアトミックに1回の操作として完了します。彼らがINSERTの全部をスパムしている場合、2番目のクエリはそれらの間に入ります。

この種のものを制御するには、Table Lockingを調べる必要があります。他LOCK TABLESUNLOCK 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; 

読み取りまたはテーブルに書き込むことができるようになります。

+0

OPは "MyISAM"と言っています。 –

+0

良い点、私はそれを逃した。ただし、ストレージエンジンの基本特性にあまり依存せず、可能な限り明示的にすることをお勧めします。来週、クライアントはInnoDBに移動し、すべてのベットはオフになります。 – Cylindric

1

短い答えは:それは依存:)

それはあなたのMySQLサーバの設定(例えばconcurrent_insertの値)に、あなたのデータを挿入するために実行しているクエリに依存します。

Documentation on concurrent inserts for MyISAM

+0

+1これはOPが理解するのに重要ですが、OPは "同じ場所に行を挿入する"と言っています。 –

2

のMyISAMは、テーブルレベルのロックを使用します。他のインサートは待つ必要があります

+0

+1これは答えですが、それを明確にしたいかもしれません。 [adrienの答え](http://stackoverflow.com/questions/10449035/two-inserts-simultaniously/10449092#10449092)を参照してください。 –

+0

:/ iveは、高性能のmySqlを読み始めたばかりで、私が与えることができる最高のクリアショットは – kommradHomer

+0

第2版だと思います。 :) –