INSERTとSELECTがmysqlテーブルで同時に実行される場合、どちらが最初に実行されますか?
例:「users」テーブルの行数が0であるとします。
次に、この2つのクエリが同時に実行されます(同じミリ秒/マイクロ秒であると想定します)。
INSERT into users (id) values (1)
と
SELECT COUNT(*) from users
最後のクエリは0または1を返しますか?
INSERTとSELECTがmysqlテーブルで同時に実行される場合、どちらが最初に実行されますか?
例:「users」テーブルの行数が0であるとします。
次に、この2つのクエリが同時に実行されます(同じミリ秒/マイクロ秒であると想定します)。
INSERT into users (id) values (1)
と
SELECT COUNT(*) from users
最後のクエリは0または1を返しますか?
users
テーブルがMyISAMであるかInnoDBであるかによって異なります。
MyISAMの場合、いずれかのステートメントがテーブルをロックします。テーブルを自分でロックする以外に、それを制御するためにできることはほとんどありません。
InnoDBの場合、トランザクションベースです。マルチバージョニングアーキテクチャでは、テーブルへの同時アクセスが可能でありSELECT
、トランザクションが開始された瞬間の行数が表示されます。INSERT
同時に進行している場合は、 SELECT
0行が表示されます。SELECT
実際、のトランザクションがINSERT
まだコミットされていない場合は、数秒後に実行されると0行が表示されることもあります。
2つのトランザクションを本当に同時に開始する方法はありません。トランザクションにはある程度の順序があることが保証されています。
どのステートメントが最初に実行されるかによって異なります。最初の場合、2番目の場合は1が返され、2番目の場合が最初に実行される場合、0が返されます。複数の物理コアを備えたコンピューターで実行している場合でも、ロックメカニズムにより、まったく同じで実行されることはありません。タイムスタンプ。