我在一个文本文件中有一些批量数据,需要导入到MySQL表中。
- ID(自动递增的整数)
1.名称(varchar)
文本文件是一个名称的大集合,每行一个名称。。
(示例)
John Doe
Alex Smith
Bob Denver
我知道如何通过phpMyAdmin导入文本文件,但是,据我所知,我需要导入与目标表具有相同字段数的数据。是否有方法将数据从我的文本文件导入到一个字段中,并使ID字段自动递增?
提前感谢您的帮助。
我在一个文本文件中有一些批量数据,需要导入到MySQL表中。
John Doe
Alex Smith
Bob Denver
我知道如何通过phpMyAdmin导入文本文件,但是,据我所知,我需要导入与目标表具有相同字段数的数据。是否有方法将数据从我的文本文件导入到一个字段中,并使ID字段自动递增?
提前感谢您的帮助。
8条答案
按热度按时间camsedfj1#
以下是迄今为止最简单的方法:
1.确保你的文件没有包含列名的标题行。如果有,删除它。
1.在phpMyAdmin中,像往常一样:进入表的 Import 选项卡并选择文件。选择
CSV
作为格式。然后--这是重要的部分--在格式特定选项:
...在
Column names:
中填写数据所在列的名称,在您的示例中为“Name”。这将导入名称并自动递增
id
列。xmakbtuz2#
我使用的另一种方法不需要重新排序表的字段(假设自动递增字段是第一列),如下所示:
现在,您将拥有一个文件,其中包含原始文件的每一行,前面有一个空列,在通过phpMyAdmin导入时,该列将转换为下一个相关的自动增量值。
3pmvbmvn3#
使用LOADTABLE INFILE导入时不正确,只需将自动递增列创建为LAST列/字段...作为其解析,如果您的表定义有30列,但文本文件只有1列(或更少),它将首先导入前导列,以直接顺序,因此确保字段之间的分隔符with...正确(对于任何将来的导入)。同样,将自动增量放在您知道要导入的列数之后。
注意IDKey在表的最后一个字段中是自动递增的......不管你的INPUT流文本文件中的列数可能比你的最终表实际容纳的列数少。
然后,通过以下方式导入数据…
上面的例子是基于逗号分隔的列表,每个字段周围都有引号,例如“myfield 1”,“anotherField”,“LastField”。此外,终止符是典型的文本文件每行分隔的cr/lf
在以全名作为单列的文本文件的示例中,所有数据都将加载到“YourMySQLTable”的FullName列中。由于IDKey位于列表的END,因此它仍然会自动递增赋值1-?,并且不会与入站文本中的列发生任何冲突。
lrl1mhuk4#
我只是使用一个TAB作为我文本文件中的第一个字段,然后像往常一样导入它。我得到了关于ID字段的警告,但是字段按预期递增...
ercv8c1e5#
我刚试过这个:
1.在phpMyAdmin表中-匹配csv中的字段数量。
1.执行CSV数据到表中的导入
1.转到[Structure]选项卡并添加一个新字段[At beginning of table](我假设您希望在那里添加id字段)
1.将[name]属性填写为“id”,
1.[长度]至“5”
1.[索引]至“主要”
1.勾选A_I(自动增量)
1.点击[Go]按钮
1.该表应该已经更新了所有数据前面的id字段,并自动递增。
至少这样你就不用担心匹配字段等问题了。
jhkqcmku6#
我已经解决了这个问题,只需在格式特定选项下添加column_names,而不添加Column ID。因为Column ID是自动递增的。在我的情况下,它工作正常,而无需更改CSV文件中的任何内容。我的CSV文件中只有数据,没有列标题。
tjjdgumg7#
如果表列不匹配,我通常会在真实的数据的位置添加带有空数据的“假”字段,因此,如果我的表需要
"id", "name", "surname", "address", "email"
,而我有"id", "name", "surname"
,我将CSV文件更改为"id", "name", "surname", "address", "email"
,但将没有数据的字段保留为空。这将导致CSV文件如下所示:
我发现它比其他方法简单。
neskvpey8#
我只是想补充一下Fabien的回答,我在以编程方式将CSV文件导入到一个主键为自动递增的表中时使用的命令。我只是指定我要插入值的列,并只在CSV文件中包含这些值。这样我就不必在空白字段中瞎折腾了。
LOAD DATA LOCAL INFILE 'files/thefile.csv' INTO TABLE
importedStuffFIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (dateCreated,field1,field2,field5,field10,field12)