Как подготовить и вставить данные из файла в БД Mysql? - PullRequest
2 голосов
/ 19 мая 2011

У меня есть эти данные в файле XLS. Файл XLS - беспорядок с большим количеством данных, которые мне не нужны. Я почистю файл и могу перестроить его.

У меня есть что-то вроде этого:

Level  - Code  - Description
 1        A       'foo foo'
 2       12331    'bar bar'
 3       13123    'bla bla'
 4       21321    'plim bar'
 5       12111    'foo plim'
 5       12111    'plim bla'
 5       12111    'bla plim'
 1        B       'bla bar'
 n        ...      ...

Уровень определяет позицию иерархии, как 1 - верхняя иерархия. 5 является самым низким.

Я буду использовать Модель Списка Смежности для хранения этой информации. Поэтому я верю, что мне придется хранить его так:

id - description - parent_id
 1    'foo foo'      NULL
 2    'bar bar'       1
 3    'bla bla'       2
 4    'plim bar'      3
 5    'foo plim'      4
 6    'plim bla'      4
 7    'bla plim'      4
 8    'bla bar'      NULL
 n     ...            ...

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

В файле XLS 9000 строк, и я бы не хотел делать это один за другим!

Какие методы мы должны рассмотреть, чтобы успешно импортировать эти данные?

Обновление: У меня есть это программное обеспечение mysqlworkbench ... Я нахожусь на Ubuntu и все с открытым исходным кодом здесь.

Заранее большое спасибо.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Используйте команду LOAD с csv-подобными данными, если это вообще возможно.

Вот пример:

LOAD DATA INFILE 'path-to-your-data-file'
INTO TABLE <your-table>
CHARACTER SET latin1
FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(col1, col2,..., coln)
;

где IGNORE 1 LINES означает, что заголовки ваших столбцов в файле данных будут игнорироваться, а (col1, col2,..., coln) - это используемые столбцы базы данных.

У вас есть много других доступных опций (см. http://dev.mysql.com/doc/refman/5.1/en/load-data.html) и LOAD предположительно в 20 раз быстрее, чем INSERT для больших объемов данных (согласно http://dev.mysql.com/doc/refman/5.1/en/insert-speed.html).

1 голос
/ 19 мая 2011

Вы можете использовать navicat для выполнения импорта, бесплатная версия будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...