Как импортировать текстовый файл в таблицу с первичным ключом в качестве автоинкремента - PullRequest
14 голосов
/ 17 марта 2010

У меня есть некоторые объемные данные в текстовом файле, которые мне нужно импортировать в таблицу MySQL. Таблица состоит из двух полей ..

  1. ID (целое число с автоинкрементом)
  2. Имя (варчар)

Текстовый файл представляет собой большую коллекцию имен с одним именем в строке ...

(пример)

John Doe
Alex Smith
Bob Denver

Я знаю, как импортировать текстовый файл через phpMyAdmin, однако, насколько я понимаю, мне нужно импортировать данные, которые имеют столько же полей, сколько и таблица назначения. Есть ли способ импортировать данные из моего текстового файла в одно поле и автоматически увеличивать поле идентификатора?

Заранее благодарю за любую помощь.

Ответы [ 6 ]

16 голосов
/ 03 марта 2012

Другой метод, который я использую, который не требует переупорядочения полей таблицы (при условии, что поле автоинкремента - это первый столбец), выглядит следующим образом:

1) Open/import the text file in Excel (or a similar program).

2) Insert a column before the first column. 

3) Set the first cell in this new column with a zero or some other placeholder.

4) Close the file (keeping it in its original text/tab/csv/etc. format).

5) Open the file in a text editor.

6) Delete the placeholder value you entered into the first cell.

7) Close and save the file.

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

7 голосов
/ 19 февраля 2015

Вот самый простой метод на сегодняшний день:

  1. Убедитесь, что в вашем файле нет строки заголовка с именами столбцов. Если это так, удалите его.
  2. В phpMyAdmin, как обычно: перейдите на вкладку Импорт для своей таблицы и выберите файл. Выберите CSV в качестве формата. Тогда - и это важная часть - в

Параметры, специфичные для формата:

... в поле Column names: введите название столбца, для которого предназначены данные , в вашем случае «Имя».

Это импортирует имена и автоматически увеличивает столбец id. Вы сделали!

Хорошо протестировано с phpMyAdmin 4.2.7.1.

5 голосов
/ 17 марта 2010

Неправильно при импорте с помощью LOADTABLE INFILE, просто создайте столбец с автоинкрементом в качестве столбца / поля LAST ... В качестве его анализа, если ваша таблица определена с 30 столбцами, но в текстовом файле есть только 1 (или что-то меньшее), он будет импортировать первые столбцы первым, в прямой последовательности, поэтому убедитесь, что ваш разделитель с ... правильно между полями (для любого будущего импорта). Опять же, поместите автоинкремент ПОСЛЕ количества импортируемых столбцов.

create table YourMySQLTable
(  FullName varchar(30) not null ,
   SomeOtherFlds varchar(20) not null,
   IDKey int not null AUTO_INCREMENT,
   Primary KEY (IDKey)
);

Обратите внимание, что IDKey - это автоинкремент в последнем поле таблицы ... независимо от вашего текстового файла потока INPUT, который может иметь меньше столбцов, чем ваша финальная таблица на самом деле.

Затем импортируйте данные через ...

LOAD DATA
    INFILE `C:\SomePath\WhereTextFileIs\ActualFile.txt`
    INTO TABLE YourMySQLTable
    COLUMNS TERMINATED BY `","`  
    LINES TERMINATED BY `\r\n` ;

Приведенный выше пример основан на разделенном запятыми списке с кавычками вокруг каждого поля, например "Myfield1", "anotherField", "LastField". Кроме того, прекращается то, что типичные текстовые файлы разделены на строку

В примере вашего текстового файла с полным именем в виде одного столбца все данные будут загружены в «YourMySQLTable» в столбец FullName. Поскольку IDKey находится в конце списка, он все равно будет автоматически увеличивать назначенные значения от 1 до? и не должно конфликтовать со столбцами входящего текста.

1 голос
/ 05 сентября 2014

Я только что попробовал это:

  1. В таблице phpMyAdmin - количество полей в вашем CSV.
  2. Выполните импорт данных CSV в вашу таблицу
  3. Перейдите на вкладку [Структура] и добавьте новое поле [В начале таблицы] (я полагаю, вам нужно поле id там)
  4. Заполните атрибут [name] как "id",
  5. [длина] до "5"
  6. [Индекс] к «Первичному»
  7. Отметьте A_I (автоинкремент)
  8. Нажать кнопку [Go]
  9. Таблица должна была обновиться с полем id в начале всех ваших данных с автоинкрементом.

По крайней мере, так вам не нужно беспокоиться о совпадении полей и т. Д.

0 голосов
/ 28 сентября 2016

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

0 голосов
/ 10 апреля 2014

Если столбцы таблицы не совпадают, я обычно добавляю «фиктивные» поля с пустыми данными, где были бы реальные данные, поэтому, если моей таблице нужно "id", "name", "surname", "address", "email", а у меня "id", "name", "surname", я меняю CSV файл должен иметь "id", "name", "surname", "address", "email", но оставить поля, для которых у меня нет данных, пустыми.

В результате файл CSV выглядит следующим образом:

1,John,Doe,,
2,Jane,Doe,,

Я считаю, что это проще, чем другие методы.

...