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?
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
.