Подобные ошибки могут возникать, когда таблица MyISAM становится поврежденной. Выполнение команды исправления для рассматриваемой таблицы - обычно все, что требуется для ее исправления:
> repair table mytablename;
Лучшее решение - не использовать MyISAM для таблиц, где данные постоянно меняются - InnoDB намного более пуленепробиваемый, и, как правильно указывает Пол, вы можете использовать транзакции для таблиц InnoDB, но не для MyISAM.
Кстати, я бы не стал переименовывать таблицы на лету - это довольно неуклюжая вещь, которую нужно делать регулярно, и может привести к некоторым очень неожиданным результатам, если у вас когда-нибудь будут другие пользователи в системе, пока происходит переименование на. Почему бы просто не сделать что-то вроде этого:
> truncate table temptable;
> truncate table importtable;
> #bulk insert new data
> insert into importtable(col1,col2,col3)
> values(1,2,3),(4,5,6),(7,8,9);
> #now archive the live data
> insert into temptable(col1,col2,col3)
> select col1,col2,col3 from livetable;
> #finally copy the new data to live
> truncate table livetable;
> insert into livetable(col1,col2,col3)
> select col1,col2,col3 from importtable;
Конечно, если вы вставляете очень большое количество строк, то существует риск, что все ваши текущие данные будут недоступны до тех пор, пока вставка завершается, но в целом этот подход гораздо менее разрушителен для индексов, триггеров или что-нибудь еще, что может быть связано с соответствующими таблицами.