使用加载数据 infile 时出现错误 1062

Error 1062 while using load data infile

我有一个 table 格式如下:

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. 第一个命令没有说明条目重复,没问题。

如果有人能帮助我,我将不胜感激。

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

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 行。