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

12 июня 2009


#создаем новую таблицу
DROP TABLE IF EXISTS table_new
CREATE TABLE table_new LIKE table
#учитываем старое значение автоинкремента
$ai = `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





Два комментария. Напиши еще один
  1. 51ab3696e9e94af82d52ad410b81a1c8 # 11 сентября 2011 coodix написал:

    для чего делается такое обновление?

    1. 777894ea5153122bfa6b83f5bbf23622 # 11 сентября 2011 Леонид Шевцов (автор) написал:

      Обновление каталога товаров из внешнего источника. Там несколько десятков тысяч позиций было.

      Если есть какой-то более простой/удобный подход, то я бы о нем почитал.

(нужна разметка?)

  • **жирный**
  • > цитата

отменить