web-dev-qa-db-fra.com

Comment permuter des tables dans MySQL?

Supposons que j'ai une table foo, qui contient des statistiques qui sont calculées de temps en temps. Il est largement utilisé par d'autres requêtes.

C'est pourquoi je veux calculer des statistiques plus récentes dans foo_new et les permuter lorsque le calcul est prêt.

Je pourrais faire

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

mais que se passe-t-il si une requête a besoin d'une table foo entre ces deux lignes alors qu'il n'y a pas de table foo? Je suppose que je dois le verrouiller d'une manière ou d'une autre ... ou y a-t-il une autre façon de le faire?

53
Ben

Utilisez cette seule commande:

RENAME TABLE foo TO foo_old, foo_new To foo;

Il s'agit d'une opération atomique: les deux tables sont verrouillées ensemble (et pendant très peu de temps), donc tout accès se produit avant ou après RENAME.

87
Shlomi Noach