如何将文本文件导入到主键自增表中

问题描述 投票:0回答:9

我的文本文件中有一些批量数据,我需要将其导入到 MySQL 表中。该表由两个字段组成..

  1. ID(自增整数)
  2. 名称(varchar)

文本文件是一大堆名称,每行一个名称......

(示例)

John Doe
Alex Smith
Bob Denver

我知道如何通过 phpMyAdmin 导入文本文件,但是,据我了解,我需要导入与目标表具有相同字段数的数据。有没有一种方法可以将文本文件中的数据导入到一个字段中,并使 ID 字段自动递增?

提前感谢您的帮助。

import phpmyadmin auto-increment
9个回答
23
投票

这是迄今为止最简单的方法:

  1. 确保您的文件没有包含列名称的标题行。如果有,请将其删除。
  2. 在 phpMyAdmin 中,像往常一样:进入表的 Import 选项卡并选择您的文件。选择
    CSV
    作为格式。然后——这是重要的部分——在

格式特定选项:

...在

Column names:
填写数据所在列的名称,在您的情况下为“名称”。

这将导入名称并自动递增

id
列。你完成了!

使用 phpMyAdmin 4.2.7.1 测试良好。


19
投票

我使用的另一种不需要重新排序表字段的方法(假设自增字段是第一列)如下:

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 导入后,该文件将转换为下一个相关的自动增量值。


8
投票

使用 LOADTABLE INFILE 导入时不正确,只需创建自动增量列作为最后一列/字段...作为其解析,如果您的表定义了 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”,“另一个字段”,“最后一个字段”。此外,终止符是典型文本文件每行分隔的 cr/lf

在将全名作为单列的文本文件示例中,所有数据都将加载到“YourMySQLTable”的 FullName 列中。由于IDKey位于列表的末尾,因此它仍然会从1-?并且与入站文本中的列没有任何冲突。


3
投票

我刚刚尝试过这个:

  1. 在 phpMyAdmin 表中 - 匹配 csv 中的字段数量。
  2. 将 csv 数据导入到您的表中
  3. 转到[结构]选项卡并添加一个新字段[在表的开头](我假设您想要其中的 id 字段)
  4. 将[name]属性填写为“id”,
  5. [长度] 为“5”
  6. [索引]“主要”
  7. 勾选A_I(自动递增)
  8. 点击[开始]按钮
  9. 该表应该已更新为所有数据前面的 id 字段并自动递增。

至少这样你就不用担心字段匹配等问题


2
投票

我只是使用 TAB 作为文本文件中的第一个字段,然后像往常一样导入它。我收到有关 ID 字段的警告,但该字段按预期递增...


1
投票

我通过简单地在特定于格式的选项下添加不带列 ID 的列名解决了这个问题。因为Column ID是自动递增的。就我而言,无需更改 CSV 文件中的任何内容即可正常工作。我的 CSV 文件中只有数据,没有列标题。


0
投票

如果表列不匹配,我通常会在真实数据所在的位置添加带有空数据的“虚假”字段,因此,如果我的表需要

"id", "name", "surname", "address", "email"
并且我有
"id", "name", "surname"
,我会将 CSV 文件更改为有
"id", "name", "surname", "address", "email"
但将我没有数据的字段留空。

这会生成如下所示的 CSV 文件:

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

我发现它比其他方法更简单。


0
投票

只是想在我以编程方式将 CSV 文件导入到主键作为自动增量的表时使用的命令上方添加 Fabien 的答案。我只是指定要向哪些列插入值,并且仅将这些值包含在 CSV 文件中。这样我就不必在空白字段上胡闹了。


LOAD DATA LOCAL INFILE 'files/thefile.csv'
INTO TABLE importedStuff
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
(dateCreated,field1,field2,field5,field10,field12)


0
投票

如果使用 phpMyAdmin,如果您选择 CSV 作为格式,则可以定义列名称。

© www.soinside.com 2019 - 2024. All rights reserved.