使用加载数据infile时出错1062

时间:2015-04-09 05:06:40

标签: mysql twitter

我有一个以下格式的表格:

mysql> describe tweet_info;
+-----------+--------------+------+-----+-------------------+-----------------------------+
| Field     | Type         | Null | Key | Default           | Extra                       |
+-----------+--------------+------+-----+-------------------+-----------------------------+
| tweet_id  | bigint(20)   | NO   | PRI | NULL              |                             |
| user_id   | bigint(20)   | YES  |     | NULL              |                             |
| tweet     | varchar(140) | YES  |     | NULL              |                             |
| timestamp | timestamp    | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| fav_count | int(11)      | YES  |     | NULL              |                             |
| lat       | float        | YES  |     | NULL              |                             |
| longi     | float        | YES  |     | NULL              |                             |
| hashtags  | varchar(140) | YES  |     | NULL              |                             |
+-----------+--------------+------+-----+-------------------+-----------------------------+
8 rows in set (0.00 sec)

以及以下架构的名为mini.txt的文件:

<tweet_id>    <user_id>    <tweet_text>    <timestamp>    <favourite_count>    <latitude>    <longitude>    <hashtags>
244435656850411520      522575984       @SGodoyAlmirall #hongostibetanos        Sat Sep 08 14:02:56 +0000 2012  0       -70.29044372    -18.48140825    hongostibetanos

当我使用以下查询时:

load data infile 'mini.txt'into table tweet_info fields terminated by '\t' lines terminated by '\n';

查询工作正常,文件中的所有行都插入到我的数据库中。只是时间戳没有得到很好的处理,所有这些都保持为空。在搜索互联网时,我发现我们可以按如下方式设置时间戳的格式:

load data infile 'mini.txt' into table tweet_info fields terminated by '\t' lines terminated by '\n' (@var4) SET timestamp=STR_TO_DATE(@var4,'%a %b %d %H:%i:%s +0000 %Y');

但是,这会产生以下错误:

ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'

这似乎很奇怪

  1. 我的文件中没有重复项(我手动检查了我正在运行命令的小文件)。
  2. 第一个命令没有说明条目的重复,而且没问题。
  3. 如果someoen可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

您需要列出列列表中的所有列:

load data infile 'mini.txt' 
into table tweet_info 
fields terminated by '\t' 
lines terminated by '\n' 
(tweet_id, user_id, tweet_text, @var4, favourite_count, latitude, longitude, hashtags>) 
SET timestamp=STR_TO_DATE(@var4,'%a %b %d %H:%i:%s +0000 %Y');

您的代码将输入文件中的第一列分配给@var4,将其转换为日期,然后插入仅指定了timestamp列的行。因此,它默认了所有其他列,并创建了重复的tweet_id = 0行。

相关问题