使用加载数据 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'
这看起来很奇怪,因为
- 我的文件中没有重复项(我已经手动检查了我目前 运行 我的命令所在的小文件)。
- 第一个命令没有说明条目重复,没问题。
如果有人能帮助我,我将不胜感激。
您需要列出列列表中的所有列:
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
行。
我有一个 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'
这看起来很奇怪,因为
- 我的文件中没有重复项(我已经手动检查了我目前 运行 我的命令所在的小文件)。
- 第一个命令没有说明条目重复,没问题。
如果有人能帮助我,我将不胜感激。
您需要列出列列表中的所有列:
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
行。