Für mich ist die Dokumentation etwas unklar:
Interne Sperrmethoden schlägt vor, dass es unter bestimmten Umständen möglich ist, in eine MyISAM-Tabelle einzufügen, während eine andere Sitzung daraus liest:
Allerdings Probleme beim Sperren von Tabellen zeigt eine Situation, in der die Tabelle gesperrt wird, bis das SELECT abgeschlossen ist (das passt zu Ihrer Situation):
InnoDB-Tabellen implementieren Sperren auf Zeilenebene, sodass nur die gelesene Zeile und nicht die gesamte Tabelle gesperrt wird.
Anstatt mich nur auf die Dokumentation zu verlassen, habe ich einen kleinen Test versucht:
- Erstellen Sie zwei Tabellen mit derselben Struktur:
table_a
undtable_b
. - Füllen Sie
table_a
aus mit 500.000 Zeilen. - Daten aus
table_a
kopieren zutable_b
mit einemINSERT INTO ... SELECT
Aussage. - Verwenden Sie während des Kopiervorgangs eine andere Sitzung, um eine neue Zeile in
table_a
einzufügen . - Überprüfen Sie, ob
table_b
enthält den neuen Datensatz.
Wenn beide Tabellen MyISAM enthalten, table_b
enthielt den neuen Datensatz nach der Kopie nicht. Wenn beide Tabellen InnoDB waren, table_b
enthielt nach der Kopie den neuen Datensatz. Ich habe dies dreimal wiederholt, und wie erwartet war das Ergebnis jedes Mal dasselbe.
Kurz gesagt, wenn Ihre Tabelle MyISAM ist, wird sie gesperrt. Wenn es InnoDB ist, wird es nicht. Natürlich berücksichtigt dieser Test keine Updates, aber ich gehe davon aus, dass die Ergebnisse ähnlich sein werden.