2012-03-08 6 views
1

У меня есть база данных mysql с одной таблицей, которая включает в себя идентификатор автоинкремента, строку и два числа. Я хочу заполнить эту базу данных множеством строк, поступающих из текстового файла, причем все номера сначала сбрасываются на 0.как заполнить базу данных?

Есть ли способ сделать это быстро? Я думал о создании сценария, который генерирует множество инструкций INSERT, но это кажется несколько примитивным и медленным. Тем более, что mysql находится на удаленном сайте.

+2

Можете ли вы отправить образец строки текстового файла, который вы хотите импортировать? – rkosegi

ответ

7

Да - использовать LOAD DATA INFILEdocs are here Пример:

LOAD DATA INFILE 'csvfile' 
INTO TABLE table 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 0 LINES 
(cola, colb, colc) 
SET cold = 0, 
cole = 0; 

Обратите внимание на set линии - здесь вы можете установить значение по умолчанию.

В зависимости от вашего разделителя полей измените строку FIELDS TERMINATED BY ','

+0

спасибо! когда я пытаюсь это сделать, я получаю: LOAD DATA INFILE 'bundles/PACKAGE1.TXT' INTO TABLE textrating FIELDS TERMINATED BY '\ t' LINES TERMINATED by '\ n' IGNORE 0 LINES (текстовая строка); ERROR 1045 (28000): доступ запрещен для имени пользователя пользователя ... и т. Д. - Я знаю, что мои права установлены так, что я могу добавить столько данных, сколько захочу. Нужно ли настраивать специальные привилегии для LOAD DATA INFILE? Отмечу, что secure_file_priv здесь NULL, и что я пытаюсь загрузить данные из локального файла на удаленный сервер. – kloop

+0

Я также отмечу, что «SHOW GRANTS» говорит, что у меня есть все привилегии. – kloop

+0

В mysql.user table убедитесь, что FILE_PRIV = 'Y' для вашего пользователя –

1

Если у вас есть доступ к файловой системе сервера, вы можете использовать LOAD DATA

Если вы не хотите, чтобы бороться с синтаксисом, самый простой способ (если на окна) использовать HeidiSQL

У этого есть дружественный волшебник для этой цели.

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

1

Другие ответы отвечают только на половину вашего вопроса. Для другой половины (обнуление числовых столбцов):

Либо:

  1. Установите значение по умолчанию номера вашего столбцов 0,
  2. В текстовом файле, просто удалите числовые значения,
  3. Это приведет к тому, поле для чтения НАГРУЗКИ INFILE как нулевое, и defauly значение будет присвоено, который вы установили в 0.

Или:

  1. После того, как у вас есть данные в таблице, введите команду MySQL до нуля полей, как

    UPDATE table SET first_numeric_column_name = 0, second_numeric_column_name = 0 WHERE 1;

И все резюмировать, использование LOAD DATA INFILE.

+0

Спасибо @ Мартин, ты избил меня! – msanford

+1

выделенный код :-) – ManseUK

+1

@ManseUK I * всегда * выделяется мой код. Должно быть, DayQuil ... – msanford

Смежные вопросы