Ако приемем, че използвате машина за транзакции (обикновено Innodb), изчистете и попълнете отново таблицата в същата транзакция.
Уверете се, че вашите читатели използват READ_COMMITTED или по-високо ниво на изолация на транзакцията (по подразбиране е REPEATABLE READ, което е по-високо).
По този начин читателите ще продължат да могат да четат старото съдържание на таблицата по време на актуализацията.
Има няколко неща, за които трябва да внимавате:
- Ако таблицата е толкова голяма, че изчерпва зоната за връщане назад - това е възможно, ако актуализирате цялата (да кажем) таблица с 1M редове. Разбира се, това може да се регулира, но има ограничения
- Ако транзакцията е неуспешна частично и бъде върната назад - връщането назад на големи транзакции е МНОГО неефективно в InnoDB (тя е оптимизирана за ангажименти, а не за връщане назад)
- Внимавайте с блокиранията и времето за изчакване на заключването, което е по-вероятно, ако използвате големи транзакции.