Import 如何将文本文件导入到主键为自动递增的表中
我在文本文件中有一些批量数据,需要导入到MySQL表中。该表由两个字段组成Import 如何将文本文件导入到主键为自动递增的表中,import,phpmyadmin,auto-increment,Import,Phpmyadmin,Auto Increment,我在文本文件中有一些批量数据,需要导入到MySQL表中。该表由两个字段组成 ID(带自动递增的整数) 名称(varchar) 文本文件是一个名称的大集合,每行一个名称 (示例) 我知道如何通过phpMyAdmin导入文本文件,但据我所知,我需要导入与目标表具有相同字段数的数据。有没有办法将文本文件中的数据导入到一个字段中,并使ID字段自动递增 提前感谢您的帮助。使用LOADTABLE Infle导入时不正确,只需创建自动增量列作为最后一列/字段。。。作为解析,如果您的表定义了30列,但文本文件只
提前感谢您的帮助。使用LOADTABLE Infle导入时不正确,只需创建自动增量列作为最后一列/字段。。。作为解析,如果您的表定义了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在表的最后一个字段中是自动递增的。。。不管您的输入流如何,文本文件的列数可能比最终表实际容纳的列数少
然后,通过…导入数据
LOAD DATA
INFILE `C:\SomePath\WhereTextFileIs\ActualFile.txt`
INTO TABLE YourMySQLTable
COLUMNS TERMINATED BY `","`
LINES TERMINATED BY `\r\n` ;
上面的示例基于逗号分隔列表,每个字段周围都有引号,例如
“myfield1”、“anotherField”、“LastField”。此外,终止的是cr/lf,即每行分隔典型文本文件
在以全名作为单列的文本文件示例中,所有数据都将加载到“YourMySQLTable”的全名列中。由于IDKey位于列表的末尾,因此它仍然是从1-?并且与入站文本中的列没有任何冲突。我使用的另一种方法不需要对表的字段重新排序(假设自动递增字段是第一列),如下所示:
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导入时,该列将转换为下一个相关的自动增量值。如果表列不匹配,我通常会在实际数据所在的位置添加带有空数据的“伪”字段,因此,如果我的表需要
“id”,“姓名”、“姓氏”、“地址”、“电子邮件”
,我有“id”、“姓名”、“姓氏”
,我将我的CSV文件更改为“id”、“姓名”、“姓氏”、“地址”、“电子邮件”
,但将我没有数据的字段留空
这将生成如下所示的CSV文件:
1,John,Doe,,
2,Jane,Doe,,
我发现它比其他方法简单。我只是尝试了以下方法:
至少通过这种方式,您不必担心匹配字段等问题。以下是迄今为止最简单的方法:
CSV
作为格式。然后——这是最重要的部分——在列名称中:
填写数据所在列的名称,以“名称”为例
这将导入名称并自动递增id
列。你完了
使用phpMyAdmin 4.2.7.1测试结果良好。我只是在文本文件中使用了一个选项卡作为第一个字段,然后像往常一样导入它。我得到了一个关于ID字段的警告,但字段按预期增加了…我解决了这个问题,只需在没有列ID的格式特定选项下添加列名称。因为列ID是自动递增的。在我的例子中,它可以正常工作,而无需更改CSV文件中的任何内容。我的CSV文件中只有数据,没有列标题。恐怕我不太明白您的答案。你能再细分一点吗?我不知道你所说的将自动递增列创建为最后一个文件是什么意思。没有其他方法可以跳过主键吗?@Rijo,正确,所有表都应该有主键。在这种情况下,因为它实际上只是一个用于批量插入的临时表,所以将最后一列作为主键只允许进行这种限定。然后可以对记录进行处理、清理并导入到生产表中,然后可以为下一次批量加载清除该表。谁在乎主键ID列在哪个物理位置用于临时工作呢?如果你想为ID创建一个额外的列,我建议你这样做。这是最好的答案!又快又简单!如果您使用的是可以在excel中打开的较小的数据集,这是一种方法。只需为主键添加一个额外的列即可。请注意,我在导入数据时总是有一个标题列,在导入数据时使用“忽略1行”。如果您没有标题行,行为可能会有所不同。如何在Excel中打开csv文件超过1000万行rows@Rijo看看是否可以使用Fabien的答案。这在4.0.10.10中也适用。谢谢我发誓这在我写答案的时候是不可能的。
1,John,Doe,,
2,Jane,Doe,,