【问题标题】:Load single column of CSV into MySQL将单列 CSV 加载到 MySQL
【发布时间】:2013-07-21 10:09:49
【问题描述】:

我有一个格式如下的 csv 文件:

Rank, URL
1, www.google.com
2, www.facebook.com
etc...

我有一个结构表

url, source, date_added

每个 csv 文件都有不同的源 ID。

我正在使用以下查询来加载我的数据

load data local infile 'this.csv' 
into table seeds.seed
fields terminated by ',';

这并不完全符合我的要求,但这是我的出发点。 我想要做的是选择第 2 列作为我的 URL 字段插入,并将每个条目的源设置为 0。所以我在想这样的事情......

load data local infile 'this.csv' 
into table seeds.seed(url, source)
select col1, '0'
fields terminated by ',';

col1 的正确表示法是什么?我是否遗漏了查询的任何其他关键部分?

【问题讨论】:

    标签: mysql load-data-infile


    【解决方案1】:
    LOAD DATA INFILE 'this.csv'
      INTO TABLE seed
      (col1) SET source = 0;
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
    LINES TERMINATED BY '\r\n';
    

    查看SO的答案。

    This 是参考

    【讨论】:

    • 提供的 SO 链接中的好例子。
    【解决方案2】:

    最终运行的查询

    load data local infile 'this.csv' into table seeds.seed
    fields terminated by ',' lines terminated by '\n'
    (@col1,@col2) set url=@col2, source='0';
    

    【讨论】:

      【解决方案3】:

      使用加载数据 infile 非常棘手。上周我花了整整一周的时间试图解决很多错误。我会给你我的见解。

      我看不到您的 create table 语句,所以我不知道您使用的是什么数据类型。 如果您有整数字段,那么即使是错误的,您也必须在 csv 文件的每个字段中至少放置一个 0。您稍后在导入后将其删除。

      如果您的整数字段是像主键一样的 auto_increment,那么您可以完全省略该字段。不要犯我的错误,然后将字段留在那里,没有任何价值。完全删除它,否则您的 csv 将以字段终止字符开头,并且不会导致问题结束。

      在文件'file.csv'中加载数据

      进入表mytablename

      以 ',' 结尾的字段

      以 '\r\n' 结尾的行 - (对于 windows)

      忽略 1 行(field1、field2、field4 等) - 您在 csv 中列出您的字段。如果您有没有数据的字段,那么您可以从 csv 中删除它们,也可以从此处的列表中省略它们。

      忽略 1 行 - 忽略包含您的字段列表的 csv 的第一行。

      设置 id=null,

      field3=null;

      我将我的 auto_increment id 字段设置为 null,因为它不在 csv 文件中,并且 mysql 知道它存在以及如何处理它。

      还将 field3 设置为 null,因为它没有值并且作为示例从 csv 文件中删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-26
        相关资源
        最近更新 更多