Перенос MySQL в таблицу с другой структурой - PullRequest
6 голосов
/ 10 сентября 2009

Моя компания в настоящее время перемещает наши базы данных, перемещая один набор таблиц из старого экземпляра MySQL в новый. Мы проделали некоторую разработку до этой миграции, и структура некоторых таблиц была изменена по сравнению с оригинальной (например, столбцы были удалены).

Итак, в настоящее время я сбросил данные из старой базы данных и сейчас пытаюсь вставить их в новую таблицу. Конечно, импорт не выполняется, когда он пытается вставить строки с большим количеством полей, чем в таблице.

Каков наилучший способ (желательно с возможностью написания сценариев, потому что я предвидел, что придется сделать это еще несколько раз), чтобы импортировать только те поля, которые мне нужны, в новую таблицу?

Ответы [ 4 ]

3 голосов
/ 24 марта 2014

Используйте самый быстрый способ, загрузите данные в файл:

- данные дампа

SELECT * INTO OUTFILE 'mybigtable.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM mybigtable

- Загрузка данных

LOAD DATA LOCAL INFILE 'mybigtable.csv' 
  INTO TABLE mynewbigtable
  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
  (@col1,@col2,@col3,@col4) set name=@col4,id=@col2;

Ссылка:

http://dev.mysql.com/doc/refman/5.6/en/insert-speed.html

http://dev.mysql.com/doc/refman/5.6/en/load-data.html

3 голосов
/ 10 сентября 2009

Обновите следующее для соответствия:

SELECT 'INSERT INTO NEW_TABLE ... ('+ to.column +');'
  FROM OLD_TABLE ot

Вам необходим оператор INSERT для таблицы в новой базе данных со списком столбцов. Затем заполните часть значения соответственно на основе значений в старой таблице. Запустите в старой среде, и у вас будут вставки с данными для новой среды - просто скопируйте и вставьте в скрипт.

Имейте в виду, что типы данных должны обрабатываться соответствующим образом - даты (включая время) и строки должны быть обработаны, потому что вы имеете дело с текстом.

2 голосов
/ 10 сентября 2009

Прежде всего, создайте новую базу данных со старой структурой или временные таблицы в текущей базе данных. Затем запустите скрипт с инструкциями вставки для каждой строки, но в значениях должны быть только те поля, которые находятся в новой структуре.

insert into newTable select row1,row2 from tempTable
0 голосов
/ 10 сентября 2009

Если вы используете MySQL 5.1, мощное, хотя, может быть, и в этом случае излишнее, решение - создать xml mysqldump и использовать XSLT для его преобразования. К сожалению, повторный импорт этого XML-файла не поддерживается в 5.0, вам потребуется 5.1, 5.4 или 6.0

...