Рецепт для массового обновления таблицы MySQL

June 12, 2009 MySQL базы данных

Бывает, что нужно перезаписать большую часть строчек в какой-нибудь большой таблице. В таком случае может быть выгоднее не обновлять строчки, а вставлять в новую таблицу.

#создаем новую таблицу
DROP TABLE IF EXISTS table_new
CREATE TABLE table_new LIKE table
#учитываем старое значение автоинкремента
$a_i = `SELECT auto_increment FROM information_schema.tables WHERE table_name="table"`
ALTER TABLE table_new AUTO_INCREMENT= $a_i
#отключаем индексацию - при обновлении она ни к чему
ALTER TABLE table_new DISABLE KEYS

# Тут производим запись новых данных в таблицу table_new
# Что делать с обновляемыми данными?
#   Нужно изначально выгрести из таблицы все данные, которые нужно сохранить,
#   в первую очередь - id. А потом подставлять эти данные в новую таблицу.

#копируем в новую таблицу все необновленные строчки
INSERT IGNORE INTO table_new SELECT * FROM table
#включем индексацию
ALTER TABLE table_new ENABLE KEYS
#убираем старую таблицу (или RENAME TABLE table TO table_old)
DROP TABLE IF EXISTS table
#подставляем на ее место новую
RENAME TABLE table_new TO table

Buy Me a Coffee at ko-fi.com