For mig er dokumentationen lidt uklar:
Interne låsemetoder foreslår, at det i nogle tilfælde er muligt at indsætte i en MyISAM-tabel, mens en anden session læser fra den:
Men Tabellåsningsproblemer viser en situation, hvor bordet vil være låst, indtil SELECT er fuldført (dette passer med din situation):
InnoDB-tabel implementerer rækkeniveaulåse, så kun den række, der læses, vil blive låst, i stedet for hele tabellen.
I stedet for kun at stole på dokumentationen prøvede jeg en lille test:
- Opret to tabeller med samme struktur:
table_aogtable_b. - Udfyld
table_amed 500.000 rækker. - Kopiér data fra
table_atiltable_bved hjælp af enINSERT INTO ... SELECTerklæring. - Under kopieringsprocessen skal du bruge en anden session til at indsætte en ny række i
table_a. - Tjek om
table_bindeholder den nye rekord.
Når begge tabeller var MyISAM, table_b indeholdt ikke den nye post efter kopien. Når begge tabeller var InnoDB, table_b indeholdt den nye post efter kopien. Jeg har gentaget dette tre gange, og som forventet blev resultatet det samme hver gang.
Så kort sagt, hvis dit bord er MyISAM, vil det være låst. Hvis det er InnoDB, vil det ikke. Selvfølgelig tager denne test ikke højde for opdateringer, men jeg forventer, at resultaterne vil være ens.