【问题标题】:How to LOAD DATA INFILE in mysql with first col being Auto Increment?如何在mysql中加载数据输入文件,第一个列是自动增量?
【发布时间】:2011-05-16 12:01:24
【问题描述】:

目前,我们有一个类似这样的表格:

---------------------
ID | AField | BField|
---------------------

ID 是自动递增的

如何创建一个 CSV,让数据库自动填充 ID 字段和自动递增编号?

我们尝试了以下 CSV,但它不起作用:

afieldvalue, bfieldvalue (With Column definition but still doesn't work)
0,afieldvalue,bfieldvalue 
NULL,afieldvalue,bfieldvalue

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    最好的做法是在 CSV 中包含 2 个非自增列,然后在 load data infile 语句中将 ID 列显式设置为 NULL。

    类似这样的:

    LOAD DATA INFILE '/tmp/data.csv'
    INTO TABLE your_table
    FIELDS TERMINATED BY ','
    (AField, BField)
    SET ID = NULL;
    

    【讨论】:

    • 如果您的 CSV 具有相同的列名,请改用 (your_table.AField, your_table.BField)
    • @Thilo LOAD DATA INFILE 不会从 CSV 读取列名。这就是为什么您必须将列设置为 CSV 列数据的确切顺序。
    • 也许值得注意的是,如果数据已导出,包括 ID 列,则可以使用 ... (@UnusedVariable,AField,BField) 导入
    【解决方案2】:

    CSV 文件中的NULL 在 MySQL 中被读取为字符串。如果您想在 MySQL 列中使用空值,请使用 \N 代替 `NULL。这将解决问题,您将获得所需的结果。

    【讨论】:

    • 其他解决方案都不起作用 - 这适用于我的 ID 列,它是一个 INT
    【解决方案3】:

    您可以通过在行首放置分隔符来“省略”数据行中的 ID 字段,如下所示(对于表架构 ID,AField,BField):

    ,afieldvalue,bfieldvalue
    ...
    

    SQL 引擎在读取此类 csv 文件时会将NULL 分配给ID 字段

    【讨论】:

      【解决方案4】:
      LOAD DATA INFILE '/tmp/data.csv'
      INTO TABLE your_table
      FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r'
      (AField, BField);
      

      【讨论】:

        【解决方案5】:
        LINES TERMINATED BY '\r\n' 
        

        这是我使用文本文件时成功的关键

        【讨论】:

        • 喜欢你在没有评论的情况下投下反对票,哈哈。我相信其他人也需要像我提到的那样终止线路以使解决方案发挥作用,如果您要投反对票,请解释为什么其他人可以理解/从您的洞察力中学习。
        • 似乎没有解释如何跳过ID字段;它也没有解释它的作用。如果您的行没有\r\n终止怎么办?
        • 显然问题已更改或合并,我的回答与终止一行以在文档中逐行显示单独结果的问题有关,它必须已扩展为稍后包含 sql 信息。
        • 我在编辑历史中看不到任何内容,但这是不久前的,我认为并非所有内容都被保留了。
        【解决方案6】:

        尝试使用 NULL 作为 csv 文件中 ID 字段的值。

        【讨论】:

          【解决方案7】:

          如果您只有少量列,您可以直接命名它们: LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE mytable (AField);(假设只有 ID 和 AField)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-23
            • 1970-01-01
            • 1970-01-01
            • 2018-11-18
            相关资源
            最近更新 更多