it-swarm.com.de

Wie tausche ich Tabellen in MySQL aus?

Angenommen, ich habe eine Tabelle foo, die einige Statistiken enthält, die von Zeit zu Zeit berechnet werden. Es wird stark von anderen Abfragen verwendet.

Deshalb möchte ich neuere Statistiken in foo_new und tauschen Sie sie aus, wenn die Berechnung fertig ist.

Ich könnte

ALTER TABLE foo RENAME foo_tmp;
ALTER TABLE foo_new RENAME foo;

aber was passiert, wenn eine Abfrage die Tabelle foo zwischen diesen beiden Zeilen benötigt, wenn keine Tabelle foo vorhanden ist? Ich muss es wohl irgendwie sperren ... oder gibt es einen anderen Weg, es zu tun?

53
Ben

Verwenden Sie diesen einen Befehl:

RENAME TABLE foo TO foo_old, foo_new To foo;

Es ist eine atomare Operation: Beide Tabellen sind miteinander (und für eine sehr kurze Zeit) gesperrt, sodass jeder Zugriff entweder vor oder nach dem RENAME erfolgt.

87
Shlomi Noach