phpmyadmin 如何将文本文件导入到主键为自动递增的表中

mbskvtky  于 2023-04-06  发布在  PHP
关注(0)|答案(8)|浏览(258)

我在一个文本文件中有一些批量数据,需要导入到MySQL表中。

  1. ID(自动递增的整数)
    1.名称(varchar)
    文本文件是一个名称的大集合,每行一个名称。。
    (示例)
John Doe
Alex Smith
Bob Denver

我知道如何通过phpMyAdmin导入文本文件,但是,据我所知,我需要导入与目标表具有相同字段数的数据。是否有方法将数据从我的文本文件导入到一个字段中,并使ID字段自动递增?
提前感谢您的帮助。

camsedfj

camsedfj1#

以下是迄今为止最简单的方法:
1.确保你的文件没有包含列名的标题行。如果有,删除它。
1.在phpMyAdmin中,像往常一样:进入表的 Import 选项卡并选择文件。选择CSV作为格式。然后--这是重要的部分--在
格式特定选项:
...在Column names:中填写数据所在列的名称,在您的示例中为“Name”。
这将导入名称并自动递增id列。

  • 在phpMyAdmin 4.2.7.1下测试正常。*
xmakbtuz

xmakbtuz2#

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

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

3pmvbmvn

3pmvbmvn3#

使用LOADTABLE INFILE导入时不正确,只需将自动递增列创建为LAST列/字段...作为其解析,如果您的表定义有30列,但文本文件只有1列(或更少),它将首先导入前导列,以直接顺序,因此确保字段之间的分隔符with...正确(对于任何将来的导入)。同样,将自动增量放在您知道要导入的列数之后。

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` ;

上面的例子是基于逗号分隔的列表,每个字段周围都有引号,例如“myfield 1”,“anotherField”,“LastField”。此外,终止符是典型的文本文件每行分隔的cr/lf
在以全名作为单列的文本文件的示例中,所有数据都将加载到“YourMySQLTable”的FullName列中。由于IDKey位于列表的END,因此它仍然会自动递增赋值1-?,并且不会与入站文本中的列发生任何冲突。

lrl1mhuk

lrl1mhuk4#

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

ercv8c1e

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字段,并自动递增。
至少这样你就不用担心匹配字段等问题了。

jhkqcmku

jhkqcmku6#

我已经解决了这个问题,只需在格式特定选项下添加column_names,而不添加Column ID。因为Column ID是自动递增的。在我的情况下,它工作正常,而无需更改CSV文件中的任何内容。我的CSV文件中只有数据,没有列标题。

tjjdgumg

tjjdgumg7#

如果表列不匹配,我通常会在真实的数据的位置添加带有空数据的“假”字段,因此,如果我的表需要"id", "name", "surname", "address", "email",而我有"id", "name", "surname",我将CSV文件更改为"id", "name", "surname", "address", "email",但将没有数据的字段保留为空。
这将导致CSV文件如下所示:

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

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

neskvpey

neskvpey8#

我只是想补充一下Fabien的回答,我在以编程方式将CSV文件导入到一个主键为自动递增的表中时使用的命令。我只是指定我要插入值的列,并只在CSV文件中包含这些值。这样我就不必在空白字段中瞎折腾了。LOAD DATA LOCAL INFILE 'files/thefile.csv' INTO TABLEimportedStuffFIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (dateCreated,field1,field2,field5,field10,field12)

相关问题