我有一个以下格式的表格:
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'
这似乎很奇怪
如果someoen可以帮助我,我将非常感激。
答案 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
行。