1

我有一个格式如下的 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 的正确表示法是什么?我是否遗漏了查询的任何其他关键部分?

4

3 回答 3

2
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答案。

是参考

于 2013-07-22T15:34:09.087 回答
1

最终工作的查询

load data local infile 'this.csv' into table seeds.seed
fields terminated by ',' lines terminated by '\n'
(@col1,@col2) set url=@col2, source='0';
于 2013-07-22T15:47:09.550 回答
1

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

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

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

在文件“file.csv”中加载数据

进入表 mytablename

以“,”结尾的字段

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

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

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

设置 id=null,

字段3=空;

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

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

于 2013-07-22T16:00:37.467 回答