2

INSERTとSELECTがmysqlテーブルで同時に実行される場合、どちらが最初に実行されますか?

例:「users」テーブルの行数が0であるとします。

次に、この2つのクエリが同時に実行されます(同じミリ秒/マイクロ秒であると想定します)。

INSERT into users (id) values (1)

SELECT COUNT(*) from users

最後のクエリは0または1を返しますか?

4

2 に答える 2

5

usersテーブルがMyISAMであるかInnoDBであるかによって異なります。

MyISAMの場合、いずれかのステートメントがテーブルをロックします。テーブルを自分でロックする以外に、それを制御するためにできることはほとんどありません。

InnoDBの場合、トランザクションベースです。マルチバージョニングアーキテクチャでは、テーブルへの同時アクセスが可能でありSELECT、トランザクションが開始された瞬間の行数が表示されます。INSERT同時に進行している場合は、 SELECT0行が表示されます。SELECT実際、のトランザクションがINSERTまだコミットされていない場合は、数秒後に実行されると0行が表示されることもあります。

2つのトランザクションを本当に同時に開始する方法はありません。トランザクションにはある程度の順序があることが保証されています。

于 2010-05-15T23:17:36.083 に答える
2

どのステートメントが最初に実行されるかによって異なります。最初の場合、2番目の場合は1が返され、2番目の場合が最初に実行される場合、0が返されます。複数の物理コアを備えたコンピューターで実行している場合でも、ロックメカニズムにより、まったく同じで実行されることはありません。タイムスタンプ。

于 2010-05-15T23:15:44.770 に答える