Förutsatt att du använder en transaktionsmotor (vanligtvis Innodb), rensa och fyll på tabellen i samma transaktion.
Se till att dina läsare använder READ_COMMITTED eller högre transaktionsisoleringsnivå (standard är REPEATABLE READ vilket är högre).
På så sätt kommer läsarna att fortsätta att kunna läsa det gamla innehållet i tabellen under uppdateringen.
Det finns några saker att vara försiktig med:
- Om tabellen är så stor att den tar ut återställningsområdet - detta är möjligt om du uppdaterar hela (säg) en 1M radtabell. Naturligtvis går det att justera men det finns gränser
- Om transaktionen misslyckas halvvägs och rullas tillbaka - att rulla tillbaka stora transaktioner är MYCKET ineffektivt i InnoDB (det är optimerat för commits, inte rollbacks)
- Var försiktig med dödlägen och tidsgränser för låsning av väntan, vilket är mer sannolikt om du använder stora transaktioner.