我的文本文件中有一些批量数据,我需要将其导入到 MySQL 表中。该表由两个字段组成..
文本文件是一大堆名称,每行一个名称......
(示例)
John Doe
Alex Smith
Bob Denver
我知道如何通过 phpMyAdmin 导入文本文件,但是,据我了解,我需要导入与目标表具有相同字段数的数据。有没有一种方法可以将文本文件中的数据导入到一个字段中,并使 ID 字段自动递增?
提前感谢您的帮助。
这是迄今为止最简单的方法:
CSV
作为格式。然后——这是重要的部分——在 格式特定选项:
...在
Column names:
填写数据所在列的名称,在您的情况下为“名称”。
这将导入名称并自动递增
id
列。你完成了!
使用 phpMyAdmin 4.2.7.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 导入后,该文件将转换为下一个相关的自动增量值。
使用 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-?并且与入站文本中的列没有任何冲突。
我刚刚尝试过这个:
至少这样你就不用担心字段匹配等问题
我只是使用 TAB 作为文本文件中的第一个字段,然后像往常一样导入它。我收到有关 ID 字段的警告,但该字段按预期递增...
我通过简单地在特定于格式的选项下添加不带列 ID 的列名解决了这个问题。因为Column ID是自动递增的。就我而言,无需更改 CSV 文件中的任何内容即可正常工作。我的 CSV 文件中只有数据,没有列标题。
如果表列不匹配,我通常会在真实数据所在的位置添加带有空数据的“虚假”字段,因此,如果我的表需要
"id", "name", "surname", "address", "email"
并且我有 "id", "name", "surname"
,我会将 CSV 文件更改为有 "id", "name", "surname", "address", "email"
但将我没有数据的字段留空。
这会生成如下所示的 CSV 文件:
1,John,Doe,,
2,Jane,Doe,,
我发现它比其他方法更简单。
只是想在我以编程方式将 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)
如果使用 phpMyAdmin,如果您选择 CSV 作为格式,则可以定义列名称。