En supposant que vous utilisez un moteur transactionnel (généralement Innodb), effacez et remplissez la table dans la même transaction.
Assurez-vous que vos lecteurs utilisent READ_COMMITTED ou un niveau d'isolation de transaction supérieur (la valeur par défaut est REPEATABLE READ qui est supérieure).
De cette façon, les lecteurs pourront continuer à lire l'ancien contenu du tableau pendant la mise à jour.
Il y a quelques points à respecter :
- Si la table est si grande qu'elle épuise la zone de restauration - cela est possible si vous mettez à jour l'intégralité (disons) d'une table de 1 million de lignes. Bien sûr, cela est réglable mais il y a des limites
- Si la transaction échoue en cours de route et est annulée, l'annulation de grosses transactions est TRÈS inefficace dans InnoDB (elle est optimisée pour les validations, pas les annulations)
- Faites attention aux interblocages et aux délais d'attente de verrouillage, qui sont plus probables si vous utilisez de grosses transactions.