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

Import 如何将文本文件导入到主键为自动递增的表中,import,phpmyadmin,auto-increment,Import,Phpmyadmin,Auto Increment,我在文本文件中有一些批量数据,需要导入到MySQL表中。该表由两个字段组成 ID(带自动递增的整数) 名称(varchar) 文本文件是一个名称的大集合,每行一个名称 (示例) 我知道如何通过phpMyAdmin导入文本文件,但据我所知,我需要导入与目标表具有相同字段数的数据。有没有办法将文本文件中的数据导入到一个字段中,并使ID字段自动递增 提前感谢您的帮助。使用LOADTABLE Infle导入时不正确,只需创建自动增量列作为最后一列/字段。。。作为解析,如果您的表定义了30列,但文本文件只

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

  • ID(带自动递增的整数)
  • 名称(varchar)
  • 文本文件是一个名称的大集合,每行一个名称

    (示例)

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


    提前感谢您的帮助。

    使用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,,
    
    我发现它比其他方法简单。

    我只是尝试了以下方法:

  • 在phpMyAdmin表中-匹配csv中的字段数量
  • 将csv数据导入到表中
  • 转到[Structure]选项卡并添加一个新字段[在表的开头](我假设您希望在那里添加id字段)
  • 将[name]属性填写为“id”
  • [长度]至“5”
  • [索引]到“主要”
  • 勾选A_I(自动增量)
  • 按[走]键
  • 该表应该已经用自动递增的所有数据前面的id字段进行了更新

  • 至少通过这种方式,您不必担心匹配字段等问题。

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

  • 确保您的文件没有带有列名的标题行。如果有,请将其移除
  • 在phpMyAdmin中,像往常一样:进入表的导入选项卡并选择文件。选择
    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,,